用于添加Year +1的Case语句的SQL Query在另一列中显示

时间:2017-09-26 07:51:21

标签: mysql sql-server

我有一张表,其中除了一列"年"我有所有值。

我想使用第一列" Code"

中的值显示Year

例如:

Code
195010
195020
195070
195110
195120
195170

Year
Null
Null
Null
Null
NUll
Null

我希望在"年"专栏如下:

1950
1950
1951
1951
1951
1952

前四个数字代表年份,代码的结尾数字为70,我希望显示前四个数字+ 1年。

我使用以下声明: 代码如N'%70'那么N' SHOWYEAR' else substring(Code,1,4)以' Year'

结尾

我不知道如何计算。我知道在我的查询中,SHOWYEAR需要更改,但无法弄清楚如何找到解决方法。

2 个答案:

答案 0 :(得分:0)

对于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

答案 1 :(得分:0)

如果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