如何筛选并按text类型Letter列字符长度排序SQL Server的Customers表记录
解决方案
你遇到的报错是因为SQL Server 中LEN、CHAR_LENGTH函数均不支持已弃用的text数据类型作为入参,同时你之前写的排序默认是升序,要取长度最大的记录需要指定降序排序,以下是两种可行实现方案:
方案1:直接使用DATALENGTH函数(适配单字节字符场景)
DATALENGTH函数原生支持读取text类型字段的字节占用量,如果你存储的Letter字段内容均为英文、数字等单字节字符,字节数等于实际字符数,可直接使用:
SELECT TOP 100 ID, DATALENGTH(Letter) AS Letter_Length FROM Customers ORDER BY Letter_Length DESC;
方案2:类型转换后计算字符数(适配含多字节字符场景)
如果Letter字段包含中文、特殊符号等多字节字符,需要准确统计实际字符数的话,可以先将text类型转换为兼容的大长度字符类型后再计算:
SELECT TOP 100 ID, LEN(CAST(Letter AS VARCHAR(MAX))) AS Letter_Length FROM Customers ORDER BY Letter_Length DESC;
提示:如果
Letter存储的是Unicode内容,将上面代码中的VARCHAR(MAX)替换为NVARCHAR(MAX)即可。
额外提示:text是SQL Server已官方弃用的字段类型,后续建议将该字段调整为VARCHAR(MAX)类型,兼容性和性能都会更好。
内容的提问来源于stack exchange,提问作者misha07380
相关产品推荐
相关产品推荐

