Tôi đang tạo các câu lệnh T-SQL SELECT cho các bảng mà tôi không có thông tin kiểu dữ liệu phía trước. Trong các câu lệnh này, tôi cần thực hiện các thao tác chuỗi tùy thuộc vào độ dài của giá trị ban đầu của các cột của bảng.T-SQL: Cách lấy độ dài chính xác của một chuỗi ký tự?
Một ví dụ (nhưng không phải là người duy nhất) là để chèn một số văn bản ở một vị trí cụ thể trong một chuỗi, bao gồm các tùy chọn để chèn nó ở cuối:
SELECT
CASE WHEN (LEN ([t0].[Product] = 8)
THEN [t0].[Product] + 'test'
ELSE STUFF ([t0].[Product], 8, 0, 'test')
END
FROM [OrderItem] [t0]
(trường hợp khi + LEN là cần thiết vì STUFF không cho phép tôi chèn văn bản vào cuối chuỗi.)
Vấn đề là LEN loại trừ khoảng trắng ở cuối, điều này sẽ làm hỏng phép tính. Tôi biết tôi có thể sử dụng DATALENGTH, không loại trừ khoảng trống cuối, nhưng tôi không thể chuyển đổi các byte được trả về DATALENGTH thành các ký tự do STUFF yêu cầu vì tôi không biết cột Sản phẩm có thuộc loại varchar hay nvarchar hay không. Vì vậy, làm thế nào tôi có thể tạo ra một câu lệnh SQL phụ thuộc vào độ dài chính xác của một chuỗi ký tự mà không có thông tin phía trước về kiểu dữ liệu chuỗi đang được sử dụng? Không.
+1 cho giải pháp hoạt động! –
+1 Đó có thể là một mẹo hữu ích. –