【问题标题】:SQL Query for Case statement of adding Year +1 to display in another column加年+1显示在另一列的Case语句SQL查询
【发布时间】:2017-09-26 07:51:21
【问题描述】:

我有一个表,其中包含除“年份”一列之外的所有值。

我想使用第一列“代码”中的值显示年份

例如:

Code
195010
195020
195070
195110
195120
195170

Year
Null
Null
Null
Null
NUll
Null

我想在“年份”列中显示的内容如下:

1950
1950
1951
1951
1951
1952

代表年份的前四个数字以及代码的结尾数字为 70 我想显示前四个数字 + 添加的 1 年。

我正在使用以下语句: Code Like N'%70' then N'SHOWYEAR' else substring(Code,1,4) end as 'Year' 的情况

我不知道如何计算。我知道在我的查询中 SHOWYEAR 需要更改,但不知道如何解决它。

【问题讨论】:

  • Mysql 还是 SQL-Server?

标签: mysql sql-server


【解决方案1】:

如果 CODE 始终具有相同的长度 (6),您可以使用以下查询。它应该适用于 db(mysql 和 MSSQL)。我使用子选择来更好地向您展示它是如何工作的。但是,如果您愿意,您可以在没有子选择的情况下轻松完成。 或者当然,如果 CODE 可以有不同的格式/值,您可以添加一些检查。

SELECT A.CODE
       , A.C_YEAR + CASE WHEN C_VALUE = '70' THEN 1 ELSE 0 END AS C_YEAR
FROM (SELECT LEFT(CODE,4) AS C_YEAR, RIGHT(CODE,2) AS C_VALUE, CODE 
      FROM YOURTABLE) A

【讨论】:

  • 谢谢etsa,您的查询也很有效,而且很安静。太好了。
【解决方案2】:

对于 Sql Server 2012 及更高版本:

SELECT 
    Code, 
    case 
        when Code Like N'%70' 
        then TRY_CONVERT(INT, substring(Code,1,4)) + 1 
        else TRY_CONVERT(INT, substring(Code,1,4)) 
    end as [Year]
from 
    (values ('195010'),('195020'),('195070'),('195110'),('19wrong5120'),('195170')) AS x(Code);

输出:

code        Year
----------- -----------
195010      1950
195020      1950
195070      1951
195110      1951
19wrong5120 NULL
195170      1952

【讨论】:

  • K - 尝试查询并收到以下错误:“TRY_CONVERT”不是可识别的内置函数名称。
  • 看来你使用的是低于2012的sql server,可以使用简单的CONVERT,手动检查错误的字符串。
  • 感谢我的查询现在确实有效:当 tl.Code Like N'%70' then CONVERT(INT, substring(tl.Code,1,4)) + 1 else CONVERT(INT, substring (tl.Code,1,4)) 以“AcademicYear”结尾,非常感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-02-08
  • 2023-02-21
  • 2017-04-21
相关资源
最近更新 更多