Трансмогрифицируйте в дату из нескольких столбцов - PullRequest
0 голосов
/ 05 мая 2010

Как лучше программировать следующий SQL:

str_to_date(
  concat(convert(D.DAY, CHAR(2)),
  '-',
  convert(M.MONTH, CHAR(2)),
  '-',
  convert(M.YEAR, CHAR(4))),
  '%e-%m-%Y' ) as AMOUNT_DATE

Я хочу преобразовать столбцы D.DAY, M.MONTH и M.YEAR в поле даты, используя MySQL. Вышеописанное работает, но кажется гораздо сложнее, чем нужно. (Если есть способ ANSI SQL, это было бы еще лучше.)

Спасибо!

Ответы [ 2 ]

2 голосов
/ 05 мая 2010

Одно небольшое улучшение, которое вы можете сделать, это использовать CONCAT_WS вместо CONCAT («WS» означает «с разделителем» - это эквивалент join или implode в Другие языки). И MySQL должен автоматически преобразовывать аргументы в строки, поэтому функции CONVERT, я считаю, не нужны.

STR_TO_DATE(
  CONCAT_WS('-', D.DAY, M.MONTH, M.YEAR),
  '%e-%m-%Y'
) AS AMOUNT_DATE

Полагаю, это не так хорошо, как арифметическое решение Томалака.

2 голосов
/ 05 мая 2010

А как же

DATE_ADD(
  DATE_ADD(
    MAKEDATE(M.YEAR,1),
    INTERVAL M.MONTH-1 MONTH
  ), 
  INTERVAL D.DAY-1 DAY
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...