SQL-запрос для добавления значений даты (месяц / день) с нуля - PullRequest
0 голосов
/ 31 декабря 2018

У меня есть такой набор данных:

year | month | day | cust_id |
2018    9       7    xyz001

Проблема с набором данных заключается в том, что дата разбивается на год, месяц и день.

Когда я использую конкат год, месяц идень я получаю следующий результат:

date:
201897

, но я хочу что-то вроде этого:

date:
20180907

то есть я хочу добавлять добавляемые нули в столбцы месяца и дня, когда у нас естьодну цифру и оставьте двузначные значения в покое.

Как я могу сделать это в SQL?

Ответы [ 4 ]

0 голосов
/ 31 декабря 2018

Попробуй это.

выберите год + '' + месяц + '' + день

0 голосов
/ 31 декабря 2018

Одним из способов является использование lpad().

SELECT concat(year, lpad(month, 2, '0'), lpad(day, 2, '0')) date
       FROM elbat;

Однако вы должны пересмотреть этот дизайн и просто использовать столбец типа даты / времени.

0 голосов
/ 31 декабря 2018

В большинстве разновидностей SQL вы можете использовать оператор case для применения логики (в данном случае префикс однозначных значений даты с 0): http://www.mysqltutorial.org/mysql-case-statement/

например,

select 
Year,
case
when len(month) = 2 then month
when len(month) = 1 then '0'+month else '' end as month,
case 
when len(day) = 2 then day
when len(day) = 1 then '0'+day else '' end as day
from table

Надеюсьэто помогает показать, как создавать операторы case, тогда вы можете объединить все это следующим образом:

select 
Year +
case
when len(month) = 2 then month
when len(month) = 1 then '0'+month else '' end +
case 
when len(day) = 2 then day
when len(day) = 1 then '0'+day else '' end +''+ as FullDate
from table
0 голосов
/ 31 декабря 2018

В большинстве баз данных вы можете преобразовать дату в такую ​​логику:

select cast(concat(year, '-', month, '-', day) as date)

Наличие истинной даты может быть достаточным.Или вы можете преобразовать обратно в строку, используя соответствующий формат даты.Например, в MySQL вы можете использовать date_format().

...