2014-02-18 3 views
1

У меня есть поле имя дата рождения в базе данных пользователей некоторые пользователи BirthDate как =обновление поля таблицы

2014/02/18

и некоторые другие, как =

2014 -02-18

Я должен использовать дату рождения VARCHAR (10)

поэтому я хочу изменить 2014/02/18 в 2014-02-18

SELECT `birthdate` 
FROM `users` 
WHERE `birthdate` LIKE '%%%%/%%/%%' REPLACE '%%%%-%%-%%' 

этот код просто выбрать пользователей с 2014/02/18

как я могу заменить, что с 2014-02-18 в sql вкладке?

+3

Почему вы храните даты как строки? Вы должны хранить их как поля даты/даты. –

+2

спасибо за помощь, но я должен использовать varchar (10), потому что моя дата в hijri shamsi http://en.wikipedia.org/wiki/Hijri_year – user3261715

ответ

0

Вы хотите оператор обновления, если вы хотите изменить данные:

update users 
    set birthdate = replace(birthdate, '/', '-') 
    where birthdate like '%/%/%'; 

Вы должны, однако, научиться хранить даты как даты, а не как строки.

+0

спасибо за помощью, но я должен использовать varchar (10), потому что моя дата в хиджри shamsi http://en.wikipedia.org/wiki/Hijri_year – user3261715

+1

@ пользователь3261715. , , Это хорошая причина. –

0

Используйте заменить функцию

replace(birthdate,'/','-') 
1

Если вы просто хотите заменить / с - вы можете сделать сравнение, как это:

SELECT `birthdate` 
FROM `users` 
WHERE replace(`birthdate`, '/', '-') LIKE '2014-02-18' 

В противном случае, удалите оба / и - от значений полей даты и сравнить для YYYYMMDD отформатированное значение.

SELECT `birthdate` 
FROM `users` 
WHERE replace(replace(`birthdate`, '/', ''), '-', '') LIKE '20140218' 
+0

Почему вы используете 'LIKE '20140218'' вместо' =' 20140218''? –

+0

Ну, это точно, я знаю. Это всего лишь пример и может изменить входное значение с помощью дикой карты для поиска. –

+0

В конце концов, поскольку дата становится строкой, которая никогда не будет использоваться в качестве индекса и нуждается в копировании таблицы tmp для заказа/поиска - результат будет таким же. –

Смежные вопросы