SQL Server 2008是否有一个字符串比较方法来检查哪个字符串应该首先出现(ex'abc'出现在'abd'之前等)?我需要做一个< =比较。
答案 0 :(得分:5)
在什么情况下? <=
在SELECT语句中工作。
答案 1 :(得分:4)
<=
运行正常。你遇到的问题是你期望从字符串中进行数字排序。没有特殊处理,这不起作用。
字符串排序
a1 - a10字符串按此顺序排序:
a1
a10
a2
a3
a4
...
这是因为a1和a10都以“a1”开头。
由于它们是字符串,因此数值无关紧要。看看当我们用a-z代替0-9时会发生什么:
ab
aba
ac
ad
ae
你现在能看到为什么你会得到你的结果吗?在字典中,aba出现在ac之前,a10出现在a2之前。
要解决您的问题,最好将您的列拆分为两个:一个字符和一个数字。一些不愉快的表达式可以为你获得正确的排序顺序,但除非你绝对没有选择,否则这是一个更糟糕的解决方案。
这是一种方式。它可能不适合或者可能有更高效的方式,但我不知道您的所有数据是什么样的。
SELECT
FROM Table
WHERE
Col LIKE 'a%'
AND Substring(Col, Convert(int, PatIndex('%[^a-z]%', Col + '0'), 1000)) <= 10
如果alpha部分总是一个字符,你可以更简单地完成它。如果数字后面可以有数字,那么需要更多的麻烦。
您还可以尝试派生表,将列拆分为单独的字母和数字部分,然后将条件放在外部查询中。
<强>整理强>
请注意,每个字符串和基于字符的列都有一个排序规则设置,用于确定哪些字母一起排序(主要用于大小写和重音),这可以更改不等操作的结果。
SELECT *
FROM Table
WHERE Value <= 'abc'
SELECT CASE WHEN Value <= 'abc' COLLATE Latin1_General_CS_AS_KS_WS THEN 1 ELSE 0 END
FROM Table
我在那里使用的校对区分大小写,区分重音。
您可以看到所有可用的排序规则:
SELECT *
FROM ::fn_helpcollations()