Как я могу преобразовать поле varchar (YYYYMM) в дату (MM / 01 / YY) в SQL? - PullRequest
2 голосов
/ 05 июля 2011

Я уверен, что это довольно просто, но я застрял на нем некоторое время. Как преобразовать поле varchar (ГГГГММ) в дату (ММ / 01 / ГГ) в SQL?

Спасибо.

Редактировать: я использую Open Office Base (HSQL), а не MySQL; извините за путаницу.

Ответы [ 5 ]

3 голосов
/ 05 июля 2011

попробуй:

SELECT STR_TO_DATE(CONCAT(myDate,'01'),'%Y%m%d') 
FROM myTable
3 голосов
/ 05 июля 2011

Попробуйте функции str_to_date и date_format .Что-то вроде:

select date_format( str_to_date( my_column, '%Y%c' ), '%c/01/%y' ) from my_table
3 голосов
/ 05 июля 2011

Использовать STR_TO_DATE:

С mysql.com :

STR_TO_DATE (str, format)

Это значение, обратноеФункция DATE_FORMAT ().Требуется строка str и формат строки формата.STR_TO_DATE () возвращает значение DATETIME, если строка формата содержит части даты и времени, или значение DATE или TIME, если строка содержит только части даты или времени.

Значения даты, времени или даты и времени, содержащиеся вstr следует указывать в формате, указанном в формате.Спецификаторы, которые можно использовать в формате, см. В описании функции DATE_FORMAT ().Если str содержит недопустимое значение даты, времени или даты и времени, STR_TO_DATE () возвращает значение NULL.Начиная с MySQL 5.0.3, недопустимое значение также создает предупреждение.

Проверка диапазона по частям значений даты описана в разделе 11.3.1, «Типы DATETIME, DATE и TIMESTAMP».Это означает, например, что «нулевые» даты или даты со значениями частей 0 допускаются, если режим SQL не настроен для запрета таких значений.

mysql> SELECT STR_TO_DATE ('00 / 00/0000 ','% m /% d /% Y');
-> '0000-00-00'
mysql> SELECT STR_TO_DATE ('04 / 31/2004 ','% m /% d /% Y ');
-> '2004-04-31'

1 голос
/ 14 марта 2013

Чтобы быть ясным: если вы ищете метод для преобразования некоторого значения типа Varchar / Text в значение типа Дата , чем решения:

  1. с использованием CAST функции

CAST(LEFT('201205',4)||'-'||SUBSTRING('201205' FROM 5 FOR 6)||'-01' AS DATE)

  1. начиная с OpenOffice 3.4 (HSQLDB 2.x) новой Oracle-подобной функции TO_DATE должен быть доступен

TO_DATE('201205','YYYYMM')

В дополнение к написанному я могу упомянуть, что вы также можете создать строку с ANSI / ISO 'YYYY-MM-DD ' форматированное представление даты, - Base подтвердит это и при необходимости успешно преобразует его в тип Date (например, INSERT в столбце с типом даты и т. Д.)

Вот документация по HyperSQL и настоятельно рекомендуется OO Base guide от Andrew Pitonyak

1 голос
/ 05 июля 2011
  • Получить год:

    SUBSTRING(field FROM 2 FOR 2)
    
  • Получить месяц:

    SUBSTRING(field FROM -2 FOR 2)
    
  • Составьте дату:

    CONCAT(SUBSTRING(field FROM -2 FOR 2), '/01/', SUBSTRING(field FROM 2 FOR 2))
    

Это преобразует из YYYYMM в MM/01/YY.

...