我有一列日期,如'20180211'。我想通过在它们之间添加“ - ”来分隔年,月和日,然后转换为日期
select column,
substring([column],1,4)+ '-' +
substring([column],5,6)+ '-' +
substring([column],7,8) as newcol1
FROM table
测试上面的代码返回'2018-0521 -21'
谁能看到我出错的地方?
谢谢!
答案 0 :(得分:2)
您的代码必须更改为
select
substring('20180211',1,4)+ '-' +
substring('20180211',5,2)+ '-' +
substring('20180211',7,2) as newcol1
否则你可以使用这段代码
select convert(DATE,'20180211',121)
答案 1 :(得分:1)
子字符串函数的第三个参数是您想要的长度。您每月需要6个字符而不是2个字符,因此它返回0521
而不是05
。
select column,
substring([column],1,4)+ '-' +
substring([column],5,2)+ '-' +
substring([column],7,2) as newcol1
FROM table
每当你有疑虑时,你总是可以分割你的表达并单独测试它们。
select column,
substring([column],1,4) as yearTest,
substring([column],5,2) as monthTest,
substring([column],5,6) as monthTest2,
substring([column],7,2) as dayTest,
substring([column],7,8) as dayTest2
FROM table
答案 2 :(得分:1)
substring函数有3个参数
SUBSTRING (str, position, [length])
查询应该是:
select
substring('20180211',1,4) || '-' ||
substring('20180211',5,2)|| '-' ||
substring('20180211',7,2) as newcol1
结果将是' 2018-02-11'
日期转换依赖于您的数据库。
PostgresSQL - to_date(text, text)
示例:to_date('05 Dec 2000', 'DD Mon YYYY')
在您的情况下:
select
to_date(substring('20180211',1,4) || '-' ||
substring('20180211',5,2)|| '-' ||
substring('20180211',7,2),'yyyy-mm-dd') as newcol1
如果您只想将字符串转换为日期,则可以使用掩码' yyyymmdd':
select to_date('20180211','yyyymmdd') as newcol1
答案 3 :(得分:0)
SELECT column, FORMAT(column,'yyyy-MM-dd') as newcol1
FROM table