2009-10-27 13 views
23

我需要更改nvarchar变量的排序规则。 By documentation在t-sql中生成nvarchar变量的排序规则

(...) 3. COLLATE子句可以在几个级别指定 。其中包括 以下内容:

将表达式的排序规则施放。您可以使用COLLATE 子句将字符表达式 应用于某种归类。字符 文字和变量被分配为 当前数据库的默认排序规则。列引用是 分配的列的定义排序规则 。有关 表达式的排序规则,请参阅Collation Precedence (Transact-SQL)。

但是我想不通的正确语法(),()转换CAST的使用或变量声明与申报这一目的。

回答

28
SELECT CAST('abc' AS varchar(5)) COLLATE French_CS_AS 
+0

谢谢! :) 15感谢 – 2009-10-27 16:18:01

+0

这来自这里:http://msdn.microsoft.com/en-us/library/aa226054%28SQL.80%29.aspx – penguat 2010-07-28 13:34:39

14

CASTCONVERT是多余的!

SELECT N'abc' COLLATE French_CS_AS 

,因为只是改变了排序规则不会更改数据类型NVARCHAR这是多余的。

3

如果您要更改2和1字节之间的字符编码,则必须使用CAST或Convert。在这些情况下,这不是多余的。

当源列是2字节字符序列(nchar,nvarchar)且选择投影必须是单字节字符(char,varchar)时,应指定转换和转换。在类型系统之间进行强制转换之前应用归类转换。

SELECT CAST(N'ФBC' COLLATE SQL_Latin1_General_CP1_CI_AS as varchar(10)) AS ProjectedSingleByte