Изменение формата данных в столбце
Попытка изменения столбца даты с YYYYMMDD на MMDDYYYY при сохранении значения varchar. В настоящее время моя колонка задана как varchar (10). Есть ли способ изменить строки в массовых количествах, потому что у меня есть тысячи строк, которые нуждаются в преобразованном формате.
Например:
| ID | Date |
------------------------
| 1 | 20140911 |
| 2 | 20140101 |
| 3 | 20140829 |
Я хочу, чтобы моя таблица выглядела так:
| ID | Date |
------------------------
| 1 | 09112014 |
| 2 | 01012014 |
| 3 | 08292014 |
Бонусный вопрос: может ли это возникнуть при попытке конвертировать этот столбец, если есть такие данные, как 91212 за 09/12/2012 или что-то вроде 1381, которое должно быть 08/01/2013?
Ответы
Ответ 1
Вместо сохранения форматированной даты в отдельном столбце; просто исправьте формат при извлечении с помощью функции STR_TO_DATE
(как вы сказали, ваши даты хранятся в виде строки /varchar ), как показано ниже. Опять же, как предложили другие, не сохраняйте данные date
в виде строки, а используйте вместо этого тип данных datetime
SELECT STR_TO_DATE(`Date`, '%m/%d/%Y')
FROM yourtable
EDIT:
В этом случае я бы предложил не обновлять исходную таблицу. Скорее сохраните эти отформатированные данные в view
или в отдельной таблице, как показано ниже
create view formatted_date_view
as
SELECT ID,STR_TO_DATE(`Date`, '%m/%d/%Y') as 'Formatted_Date'
FROM yourtable
(ИЛИ)
create table formatted_date_table
as
SELECT ID,STR_TO_DATE(`Date`, '%m/%d/%Y') as 'Formatted_Date'
FROM yourtable
EDIT1:
В случае использования SQL Server CONVERT
используется функция CONVERT(datetime, Date,110)
. так что было бы (здесь 110 - стиль для формата mm-dd-yyyy)
SELECT ID,convert(datetime,[Date],110) as 'Formatted_Date'
FROM yourtable
(ИЛИ)
CAST
, как показано ниже (только недостаток, вы не можете использовать какой-либо конкретный стиль для форматирования даты)
SELECT ID, cast([Date] as datetime) as 'Formatted_Date'
FROM yourtable
Ответ 2
Решение MS SQL Server:
С каким SQL вы пытаетесь?
MSSQL Server 2008 R2
Вы можете использовать функцию Convert
в поле date
. Вы должны указать формат даты. Стиль.
Для формата mm/dd/yyyy
значение стиля 101
.
Используя значение стиля, ваш оператор обновления может быть:
UPDATE table_name
SET date = CONVERT( VARCHAR, date, 101 )
Обратитесь к:
Решение MySQL:
он должен оставаться в varchar
или int
, а даты - yyyymmdd
, и мне нужно изменить тысячи строк данных в формате mmddyyyy
.
Измените на date
с помощью str_to_date
, а затем снова измените на строку, используя date_format
.
UPDATE table_name
SET date = DATE_FORMAT( STR_TO_DATE( date, '%Y%m%d' ), '%m%d%Y' )
Значение 20140911
при преобразовании из формата yyyymmdd
в mmddyyyy
сохранит ведущий 0
как 09112014
.
Бонусный вопрос. Возникла бы проблема при попытке конвертировать этот столбец, если для 09/12/2012
есть такие данные, как 91212
или что-то вроде 1381
, которое должно быть 08/01/2013
Вы можете использовать str_to_date( '91212', '%c%e%y' )
для преобразования того же самого в действительный объект date
. Но MySQL, хотя и определяет для поддержки одиночных цифр month
и date
, он не будет правильно анализировать такую дату и возвращает NULL
в таких форматах.
mysql> select str_to_date( '91212', '%c%e%y' ) s1, str_to_date( '091212', '%c%e%y' ) s2;
+------+------------+
| s1 | s2 |
+------+------------+
| NULL | 2012-09-12 |
+------+------------+
1 row in set, 1 warning (0.00 sec)
mysql> show warnings;
+---------+------+------------------------------------------------------------+
| Level | Code | Message |
+---------+------+------------------------------------------------------------+
| Warning | 1411 | Incorrect datetime value: '91212' for function str_to_date |
+---------+------+------------------------------------------------------------+
1 row in set (0.00 sec)