我有一张表,其中除了一列"年"我有所有值。
我想使用第一列" 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需要更改,但无法弄清楚如何找到解决方法。
答案 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