Обновить все значения столбца до нижнего регистра

100

Допустим, у меня есть что-то вроде этого

uid    tag
1      HeLLo
2      heLLO
3      HELLO
4      hello

Как я могу обновить все значения в столбце «тег», чтобы:

uid    tag
1      hello 
2      hello 
3      hello 
4      hello 

используя MySQL?

Адам Рамадан
источник

Ответы:

243

См. Http://dev.mysql.com/doc/refman/5.0/en/string-functions.html#function_lower

UPDATE table_name SET tag = LOWER(tag)
Риппо
источник
3
Обратите внимание: это не работает правильно, если в вашей базе данных используется сопоставление без учета регистра.
EmeraldD.
Как это будет работать с адресами электронной почты? Name@domain.com Изменится ли @?
Björn C
2
UPDATE table_name SET tag = BINARY LOWER(tag)для сопоставления без учета регистра.
Enyby
2
@ BjörnC - верхние / нижние меняют только буквы; все остальные символы без изменений.
ToolmakerSteve
@Rippo Я получаю эту ошибку, когда пытаюсь выполнить этот запросHINT: No function matches the given name and argument types. You might need to add explicit type casts.
Луна Лавгуд
68

НИЖНИЙ ()

update table set tag = LOWER(tag)
Шакти Сингх
источник
Я получаю эту ошибку, когда пытаюсь выполнить этот запрос. СОВЕТ: ни одна функция не соответствует заданному имени и типам аргументов. Возможно, вам потребуется добавить явное приведение типов.
Луна Лавгуд
4

Версия для сопоставления без учета регистра и включения предложения WHERE, если вы не хотите обновлять весь столбец:

UPDATE table 
SET tag = LOWER(tag)
WHERE LOWER(tag) != tag
COLLATE Latin1_General_CS_AS

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

Сюзи
источник
Я получаю эту ошибку, когда пытаюсь выполнить этот запрос. СОВЕТ: ни одна функция не соответствует заданному имени и типам аргументов. Возможно, вам потребуется добавить явное приведение типов.
Луна Лавгуд
3

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

update `table` set `column_name` = LOWER(column_name without quotation)
Анджани Барнвал
источник