【问题标题】:Replacing a word with a number in SQL Server在 SQL Server 中用数字替换单词
【发布时间】:2014-08-27 15:55:47
【问题描述】:

我有一个包含一个单词的 12 列的表,我想将其更改为一个数字。例如:这 12 列中的每一列都可以具有以下 5 个预先指定的可能值之一:

  • highly agree
  • agree
  • no opinion
  • disagree
  • highly disagree

我想用数字来改变这些词,问题是数据类型,它不允许我将nvarchar数据类型更改为数字,我什至尝试将text数据类型包含{非常同意,同意,没有意见,不同意,非常不同意},然后将它们更改为数字,但出现此错误:

Msg 402, Level 16, State 1, Line 1
数据类型 text 和 varchar 在等于运算符中不兼容。

我使用的查询是这样的:

[A1]= (case when [A1]='highly agree' then 1 
            when [A1]='agree' then 4 
            when [a1]='نظری ندارم' then 9 
            when [a1]='موافقم' then 16 
            when [a1]='کاملا موافقم' then 25 
            else [A1] end )

【问题讨论】:

  • 试试'' 喜欢... then '1' ...
  • A1 是什么数据类型?

标签: sql sql-server tsql sqldatatypes


【解决方案1】:

您不需要将列转换为文本数据类型,但您必须在案例语句中使用数字作为 varchar。不能在 case 语句中混淆数据类型

[A1]= (case when [A1]='highly agree' then '1' when [A1]='agree' then '4' when     [a1]='نظری ندارم' then '9' when [a1]='موافقم' then '16' when [a1]='کاملا موافقم' then '25' else [A1] end )

进一步回答您的问题,如果您想在此字段上保留计算,那么您必须将整个列转换为 Number。例如,您可以使用此查询

[CalculatedColumn]= CAST(case when [A1]='highly agree' then '1' 
                          when [A1]='agree' then '4' 
                          when [a1]='نظری ندارم' then '9' 
                          when [a1]='موافقم' then '16' 
                          when [a1]='کاملا موافقم' then '25' 
                          else '999' end ) AS INT) -- Any other number which can cast to integer

【讨论】:

  • 那么是否可以对它们求和或计算它们的平均值??
【解决方案2】:

试试这个:

 SELECT (CASE A1 WHEN 'highly agree' THEN '1'
                 WHEN 'agree' THEN '4' 
                 WHEN 'نظری ندارم' THEN '9' 
                 WHEN 'موافقم' THEN '16' 
                 WHEN 'کاملا موافقم' THEN '25' 
                 ELSE A1
         END) AS A1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多