关闭

关于SQL数据类型的优先顺序

644人阅读 评论(0) 收藏 举报

 在写CASE WHEN THEN语句时,遇到一个转化错误问题,如下:


库中的status为A,使用语句:

SELECT a=(CASE WHEN Status='A'  THEN   'A'   ELSE GETDATE() END) FROM dbo.DeliveryDelayMessage

数据库返回错误信息:Conversion failed when converting date and/or time from character string.

而如果改变下顺序:

SELECT a=(CASE WHEN Status='A' THEN   GETDATE()  ELSE  'A' end) FROM dbo.DeliveryDelayMessage

数据正确并返回日期。


结果为什么会被转化为日期型?如果结果列表是数字和日期,则没有转化错误?查其原因,SQL中的数据类型是有优先顺序的,相关资料如下:


数据类型的优先顺序

当两个不同数据类型的表达式用运算符组合后,数据类型的优先顺序规则确定哪种数据类型要向另一种转换。优先顺序低的数据类型向优先顺序高的数据类型转换。如果此转换不是所支持的固有转换,则返回错误。当两个操作数表达式有相同的数据类型时,运算的结果就为那种数据类型。

下面是 Microsoft® SQL Server™ 2000 数据类型的优先顺序:

  1. sql_variant(最高)

  2. datetime

  3. smalldatetime

  4. float

  5. real

  6. decimal

  7. money

  8. smallmoney

  9. bigint

  10. int

  11. smallint

  12. tinyint

  13. bit

  14. ntext

  15. text

  16. image

  17. timestamp

  18. uniqueidentifier

  19. nvarchar

  20. nchar

  21. varchar

  22. char

  23. varbinary

  24. binary(最低)

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:281328次
    • 积分:3245
    • 等级:
    • 排名:第10460名
    • 原创:46篇
    • 转载:114篇
    • 译文:0篇
    • 评论:14条