【发布时间】:2016-07-08 10:25:37
【问题描述】:
我有以下查询可以正常工作:
SELECT 'User ID' AS 'uid',
'E-Mail' AS 'email',
'Reason' AS 'reason'
UNION ALL
SELECT a.subid AS 'uid',
a.email AS 'email',
b.data AS 'reason'
FROM sms7l_subscriber a
LEFT JOIN sms7l_history b ON a.subid = b.subid
WHERE (a.confirmed = 0
OR a.enabled = 0
OR a.accept = 0)
AND b.action = unsubscribed
现在我想直接在 b.data 上做一些字符串替换......它包含一个相当难读的字符串,例如- 'REASON::UNSUB_SURVEY_FREQUENT REASON::UNSUB_SURVEY_IRRELEVANT REASON::Some text from textfield'
我想用 'Reason:' 替换 'REASON::' 并用相应的字符串替换 'UNSUB_SURVEY_FREQUENT' 等。我需要在 'b.data' 上进行大约 4-5 个字符串替换
我尝试了以下方法:
SELECT 'User ID' AS 'uid',
'E-Mail' AS 'email',
'Reason' AS 'reason'
UNION ALL
SELECT a.subid AS 'uid' , a.email AS 'email',
REPLACE (b.data,
'REASON::',
'Reason: ') AS 'reason'
FROM sms7l_subscriber a
LEFT JOIN sms7l_history b ON a.subid = b.subid
WHERE (a.confirmed = 0
OR a.enabled = 0
OR a.accept = 0)
AND b.action = unsubscribed
但它不起作用。不幸的是,我必须在单个查询中执行此操作,并且它必须包含替换。有关如何正确包装替换命令的任何提示都会很棒。
更新:感谢您迄今为止的意见。以下是我错过的一些附加信息,可能会引起一些混乱: 这是一个 MySQL 数据库,我不想实际替换数据库本身中的字符串或创建一个新表 - 我只想替换查询结果中的字符串。这背后的原因:我使用的 cms 有一个非常方便的工具,它允许我将 mysql 查询的结果呈现为格式良好的 html 表(它是可排序的、可搜索的等)。 不幸的是,我只能使用一个查询,并且不能调用任何进一步的程序来格式化查询结果。结果的第一行可以设置为标题,因此可以在我的查询开头设置“union all”语句。因为我希望表格易于阅读,所以我想替换(翻译)“b.data”上的字符串。例如。而不是“REASON::UNSUB_SURVEY_IRRELEVANT”,我想要“原因:时事通讯的内容不再让我感兴趣”......“REASON::UNSUB_SURVEY_FREQUENT”应该得到相应的翻译......
我希望即使 SQL 查询最终变得相当复杂,它也能节省我为我的 cms 编写适当的模块。
错误信息:
1064 You have an error in your SQL syntax;
check the manual that corresponds to your MySQL server version
for the right syntax to use near... (and than comes the query string).
(感谢 SQL 查询的格式更改 - 现在更好阅读)。
【问题讨论】:
-
不起作用是什么意思?
-
什么 RDBS? Microsoft SQL Server、Postgres、Oracle....?
-
你说 “我需要在 'b.data' 上进行大约 4-5 次字符串替换”,但这里只显示了一个 REPLACE 语句。你能显示消息错误吗?
标签: mysql sql select replace left-join