SQL Server 2008是否有一个字符串比较方法,用于检查哪个字符串应该先到达(例如'abc'在'abd'之前等)?我需要做一个< =比较。SQL Server 2008中的字符串比较
回答
<=
工作正常。你遇到的问题是你期望数字从字符串中排序。没有特殊处理,这是行不通的。
字符串排序
A1 - A10串排序顺序:
a1
a10
a2
a3
a4
...
这是因为A1和A10开始与 “A1”。
由于它们是字符串,所以数字值是不相关的。看看会发生什么,当我们代替0-9 A-Z:
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
如果阿尔法部分总是一个字符,你可以更简单地做到这一点。如果数字后面有字母,则需要更多的旋转。
您也可以尝试一个派生表,将列拆分为单独的字母和数字部分,然后将条件放入外部查询中。
整理
注意每个字符串和基于字符列有确定哪些字母排序一起(主要是大小写和重音),这可以改变不平等的操作结果的排序规则设置。
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()
在什么情况下? <=
在SELECT语句中工作。
同意。各种字符串归类的列表在http://msdn.microsoft.com/en-us/library/ms144250.aspx给出 – dsolimano 2011-05-29 01:58:04
SELECT * FROM ( SELECT'a1'as col1 UNION SELECT'a2'UNION SELECT'a3 'UNION SELECT'a10'UNION SELECT'test' )a WHERE col1 <='a10';只产生'a1'和'a10'。 – mwok 2011-05-29 01:59:31
@mwok - 这是因为'a2'和'a3',按字母顺序排在'a10'之后。如果您希望系统评估数值,则字符串的结构必须一致。他们总是以单个角色开始? – Thomas 2011-05-29 02:12:38
- 1. SQL Server 2008和Unicode字符比较
- 2. SQL Server 2008 R2日语错误(NVARCHAR)字符串比较?
- 3. SQL Server 2008中的NULL比较
- 4. SQL Server 2008中的时序比较
- 5. 在SQL字符串比较
- 6. PL SQL字符串比较
- 7. SQL字符串比较
- 8. 在SQL Server 2008中比较时间
- 9. 如何比较SQL Server中的两个字符串元素
- 10. SQL Server 2005中,其中有字符串比较
- 11. 的SQL Server 2008 R2:字符串匹配
- 12. 字符串比较
- 13. 在SQL Server中比较NULL与字符串
- 14. SQL Server 2005 - 比较字符列与int
- 15. SAS字符串比较
- 16. 在SQL Server如何比较模式2008
- 17. SQL Server 2008:如何比较XML?
- 18. 字符串比较
- 19. SQL比较数字字符串
- 20. 的SQL Server:比较日期字符串没有前导零
- 21. SQL Server等于int和字符串之间的比较?
- 22. SQL Server 2008 - 连接字符串
- 23. SQL Server Express 2008连接字符串
- 24. SQL SERVER 2008 R2字符串拆分
- 25. c#2008 SQL Server Express连接字符串
- 26. 复杂SQL字符串比较
- 27. 使用比较运算符比较postgres中的字符串?
- 28. 如何比较两个字符串在SQL Server 2008的T-SQL中是否包含相同的单词?
- 29. 字符串/字符比较与python中的按位比较
- 30. 比较字符串
@mwok:根据您的意见进行更新。 – ErikE 2011-05-29 02:12:11
是否有某种“散列”函数会从字符串中生成一个唯一的数字,以便我可以比较而不是字符串? – mwok 2011-05-29 02:33:46
@mwok不会工作。我更新了我的帖子。 – ErikE 2011-05-29 08:05:23