我想在mySQL select查询中将整数转换为文本.这是表格的样子:
Languages
--------
1,2,3
Run Code Online (Sandbox Code Playgroud)
我想将每个整数转换为一种语言(例如,1 =>英语,2 =>法语等)
我一直在阅读mySQL中的CONVERT和CAST函数,但它们似乎主要关注将各种数据类型转换为整数.而且我找不到任何与我存储数据的特定方式有关的事情(在一个字段中有多个数字).
如何在mySQL查询中将整数转换为文本?
UPDATE
这是我的mySQL查询:
SELECT u.id, ulp.userid, ulp.languages, ll.id, ll.language_detail
FROM users AS u
JOIN user_language_profile AS ulp ON (ulp.userid = u.id)
JOIN language_detail AS ll ON (ulp.languages = ll.id)
Run Code Online (Sandbox Code Playgroud)
使用:
MySQL的ELT()功能:
SELECT
ELT(Languages
, 'English' -- 1
, 'French' -- 2
-- etc.
)
FROM table_name
Run Code Online (Sandbox Code Playgroud)甲CASE表达式:
SELECT
CASE Languages
WHEN 1 THEN 'English'
WHEN 2 THEN 'French'
-- etc.
END
FROM table_name
Run Code Online (Sandbox Code Playgroud)虽然,如果可能的话,我会想要使用JOIN查找表(如@TamTER所说)或将列的数据类型更改为ENUM('English','French',...).
UPDATE
从您的评论中,现在看来每个字段都包含一组(甚至可能使用SET数据类型?)语言,并且您想用字符串替换数值?
首先,阅读Bill Karwin的优秀答案 "将分隔列表存储在数据库列中真的那么糟糕吗?".
在这种情况下,我建议您对数据库进行标准化:创建一个新的语言实体表,其中每个记录将现有表中实体的PK与单个语言相关联.然后,您可以使用聚合SELECT查询(加入该新表)GROUP_CONCAT以获取所需的语言名称列表.
如果没有这样的规范化,你唯一的选择是进行基于字符串的搜索和替换(这不会特别有效); 例如:
SELECT CONCAT_WS(',',
IF(FIND_IN_SET('1', Languages), 'English', NULL),
IF(FIND_IN_SET('2', Languages), 'French' , NULL),
-- etc.
)
FROM table_name
Run Code Online (Sandbox Code Playgroud)