我想对这些字符串值执行查询:
Record ID / Value
1 / 10.5
2 / 12
3 / 8
4 / 19.25
5 / 16.4
6 / 14
value列是nvarchar列。我想过滤用户插入的两个字符串值之间的结果(例如10和15)。我试着用:
SELECT Value
FROM Table
WHERE CONVERT(decimal(10, 2), Value)
BETWEEN CONVERT(decimal(10, 4), '10')
AND CONVERT(decimal(10, 4), '15')
但我有以下错误:
Error converting data type nvarchar to numeric.
数据类型有什么问题?
答案 0 :(得分:0)
您可以使用TRY_CONVERT
(SQL Server 2012及更高版本):
SELECT Value
FROM Table
WHERE TRY_CONVERT(decimal(10, 2),Value) BETWEEN TRY_CONVERT(decimal(10, 4), '10')
AND TRY_CONVERT(decimal(10, 4), '15')
更好的方法是添加计算列:
CREATE TABLE tab(
value VARCHAR(100),
value_as_decimal AS (TRY_CONVERT(decimal(10, 2),Value)) PERSISTED
);
CREATE INDEX tab_ix ON tab(value_as_decimal) INCLUDE(Value);
SELECT Value
FROM Table
WHERE value_as_decimal BETWEEN TRY_CONVERT(decimal(10, 4), '10')
AND TRY_CONVERT(decimal(10, 4), '15');
<强> DBFiddle Demo 强>
理想的解决方案是将值存储为DECIMAL(10,4)
并忘记投射。