"CASE" in SQL 查询不适用于字符串值
"CASE" in SQL Query not work with string values
我有简单的“大小写”查询,可以处理数字但不能处理字符串?
它工作正常:
SELECT
OrderItem_ID,Cost,
Case
When Cost = 0 then 555
Else Cost
End As CostStatus
FROM
OrderItem
没用:
SELECT
OrderItem_ID,Cost,
Case
When Cost = 0 then "Free"
Else Cost
End As CostStatus
FROM
OrderItem
错误是:
列名称无效 'Free'。
CASE 表达式的所有结果都应该return 相同的数据类型,或者需要按照数据优先级进行隐式转换。在这种情况下,数字类型的优先级高于字符串数据类型。因此,您需要使用显式转换。
SELECT
OrderItem_ID,Cost,
Case
When Cost = 0 then 'Free'
Else CAST( Cost AS varchar(13))
End As CostStatus
FROM
OrderItem
编辑:我将双引号更改为 T-SQL 中的标准单引号。双引号仅在 QUOTED_IDENTIFIERS 为 OFF 时有效。提出的查询中存在这两个问题。
你有两个问题。
SQL 字符串通常由 '
而不是 "
括起来。 (MS Access 是使用 "
的示例,但 SQL 标准是 '
,包括 SQL 服务器)
这给了你这个...
SELECT
OrderItem_ID,Cost,
Case
When Cost = 0 then 'Free'
Else Cost
End As CostStatus
FROM
OrderItem
但是你试图将字符串 ('free'
) 放在与一堆数字相同的列中:costStatus
.
您希望该列是字符串列还是数字列? 不能两者都...
也许你应该有两列?您已经有了自己的 cost
列,所以也许只有 'free'
和 'not free'
作为两个可能的状态值?
SELECT
OrderItem_ID,
Cost,
Case
When Cost = 0 then 'Free'
Else 'Not Free'
End As CostStatus
FROM
OrderItem
如果只是为了让您可以将报告中的 0.00
替换为单词 free
,那么您不应该在 SQL 中这样做。您应该在报告 (或您拥有的任何表示层).
中执行此操作
我有简单的“大小写”查询,可以处理数字但不能处理字符串?
它工作正常:
SELECT
OrderItem_ID,Cost,
Case
When Cost = 0 then 555
Else Cost
End As CostStatus
FROM
OrderItem
没用:
SELECT
OrderItem_ID,Cost,
Case
When Cost = 0 then "Free"
Else Cost
End As CostStatus
FROM
OrderItem
错误是: 列名称无效 'Free'。
CASE 表达式的所有结果都应该return 相同的数据类型,或者需要按照数据优先级进行隐式转换。在这种情况下,数字类型的优先级高于字符串数据类型。因此,您需要使用显式转换。
SELECT
OrderItem_ID,Cost,
Case
When Cost = 0 then 'Free'
Else CAST( Cost AS varchar(13))
End As CostStatus
FROM
OrderItem
编辑:我将双引号更改为 T-SQL 中的标准单引号。双引号仅在 QUOTED_IDENTIFIERS 为 OFF 时有效。提出的查询中存在这两个问题。
你有两个问题。
SQL 字符串通常由 '
而不是 "
括起来。 (MS Access 是使用 "
的示例,但 SQL 标准是 '
,包括 SQL 服务器)
这给了你这个...
SELECT
OrderItem_ID,Cost,
Case
When Cost = 0 then 'Free'
Else Cost
End As CostStatus
FROM
OrderItem
但是你试图将字符串 ('free'
) 放在与一堆数字相同的列中:costStatus
.
您希望该列是字符串列还是数字列? 不能两者都...
也许你应该有两列?您已经有了自己的 cost
列,所以也许只有 'free'
和 'not free'
作为两个可能的状态值?
SELECT
OrderItem_ID,
Cost,
Case
When Cost = 0 then 'Free'
Else 'Not Free'
End As CostStatus
FROM
OrderItem
如果只是为了让您可以将报告中的 0.00
替换为单词 free
,那么您不应该在 SQL 中这样做。您应该在报告 (或您拥有的任何表示层).