SQL 将表达式转换为数据类型 datetime 的服务器算术溢出错误
SQL Server Arithmetic overflow error converting expression to data type datetime
我想按 自定义订单,如果数量为负,则该行必须在第一行,如果数量为正,我将按 ExpDate
排序
SELECT WhsCode,
ItemCode,
LotNumber,
ExpDate,
Qty
FROM rq_Test2
ORDER BY CASE
WHEN qty < 0 THEN Qty
ELSE ExpDate
END
但我收到“将表达式转换为数据类型日期时间时出现算术溢出错误。”的错误。为什么?
谢谢..
Select WhsCode,ItemCode,LotNumber,ExpDate,Qty
from rq_Test2
order by case when qty < 0 then Qty else ExpDate end
此处在case
语句编译器会尝试将Qty(numeric value)
转换为Expdate(datetime)
因为case
语句会将所有result_expression
转换为result_expression
中优先级最高的数据类型。
在你的情况下 Datetime
的优先级高于 numeric or int or Bigint etc..
所以你得到了那个错误。
SQL Server
对数据类型使用以下 precedence
顺序:
user-defined data types (highest)
sql_varian t
xml
datetimeoffset
datetime2
datetime
smalldatetime
date
time
float
real
decimal
money
smallmoney
bigint
int
smallint
tinyint
bit
ntext
text
image
timestamp
uniqueidentifier
nvarchar (including nvarchar(max) )
nchar
varchar (including varchar(max) )
char
varbinary (including varbinary(max) )
binary (lowest)
有两个 case 语句
Select
WhsCode,
ItemCode,
LotNumber,
ExpDate,
Qty
from rq_Test2
order by case when qty < 0 then Qty else null end ,
case when qty > 0 then ExpDate else NULL end
我想按 自定义订单,如果数量为负,则该行必须在第一行,如果数量为正,我将按 ExpDate
排序SELECT WhsCode,
ItemCode,
LotNumber,
ExpDate,
Qty
FROM rq_Test2
ORDER BY CASE
WHEN qty < 0 THEN Qty
ELSE ExpDate
END
但我收到“将表达式转换为数据类型日期时间时出现算术溢出错误。”的错误。为什么?
谢谢..
Select WhsCode,ItemCode,LotNumber,ExpDate,Qty
from rq_Test2
order by case when qty < 0 then Qty else ExpDate end
此处在case
语句编译器会尝试将Qty(numeric value)
转换为Expdate(datetime)
因为case
语句会将所有result_expression
转换为result_expression
中优先级最高的数据类型。
在你的情况下 Datetime
的优先级高于 numeric or int or Bigint etc..
所以你得到了那个错误。
SQL Server
对数据类型使用以下 precedence
顺序:
user-defined data types (highest)
sql_varian t
xml
datetimeoffset
datetime2
datetime
smalldatetime
date
time
float
real
decimal
money
smallmoney
bigint
int
smallint
tinyint
bit
ntext
text
image
timestamp
uniqueidentifier
nvarchar (including nvarchar(max) )
nchar
varchar (including varchar(max) )
char
varbinary (including varbinary(max) )
binary (lowest)
有两个 case 语句
Select
WhsCode,
ItemCode,
LotNumber,
ExpDate,
Qty
from rq_Test2
order by case when qty < 0 then Qty else null end ,
case when qty > 0 then ExpDate else NULL end