在SQL表中将字符插入字符串

时间:2018-05-30 09:14:31

标签: sql date substring

我有一列日期,如'20180211'。我想通过在它们之间添加“ - ”来分隔年,月和日,然后转换为日期

select column,
        substring([column],1,4)+ '-' +
        substring([column],5,6)+ '-' +
        substring([column],7,8) as newcol1

FROM table

测试上面的代码返回'2018-0521 -21'

谁能看到我出错的地方?

谢谢!

4 个答案:

答案 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