вставить символ в строку в таблице SQL - PullRequest
0 голосов
/ 30 мая 2018

У меня есть столбец с датами, например «20180211».Я хочу разделить год, месяц и день, добавив между ними символ «-», а затем преобразовать в дату

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

FROM table

, проверяя приведенный выше код, возвращает «2018-0521 -21»

Кто-нибудь может увидеть, где я иду не так?

спасибо!

Ответы [ 4 ]

0 голосов
/ 30 мая 2018

Ваш код должен быть изменен на

select 
        substring('20180211',1,4)+ '-' +
        substring('20180211',5,2)+ '-' +
        substring('20180211',7,2) as newcol1

, иначе вы можете использовать этот код

select convert(DATE,'20180211',121)
0 голосов
/ 30 мая 2018

Третий параметр функции подстроки - это длина, которую вы хотите получить.Вы брали 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
0 голосов
/ 30 мая 2018

функция подстроки имеет 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
0 голосов
/ 30 мая 2018
  SELECT column, FORMAT(column,'yyyy-MM-dd') as newcol1
  FROM table
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...