mysql - 将修剪功能添加到现有的sql查询中

标签 mysql joomla

我正在使用的数据库表在 4 个特定列中的某些值周围有引号。我已经使用以下查询来选择我需要的数据,但我希望能够从这些列中删除引号。

SELECT t1.id,
IF(
    LOCATE(' ', t1.name) > 0,
    SUBSTRING(t1.name, 1, LOCATE(' ', t1.name) - 1),
    t1.name
    ) AS memberfirst,
    IF(
    LOCATE(' ', t1.name) > 0,
    SUBSTRING(t1.name, LOCATE(' ', t1.name) + 1),
    NULL
    ) AS memberlast ,
    t1.name,
  MAX(CASE WHEN t2.`profile_key` = 'profile.address1' THEN t2.profile_value END) address,
  MAX(CASE WHEN t2.`profile_key` = 'profile.city' THEN t2.profile_value END) city,
  MAX(CASE WHEN t2.`profile_key` = 'profile.postal_code' THEN t2.profile_value END) postal_code,
  MAX(CASE WHEN t2.`profile_key` = 'profile.phone' THEN t2.profile_value END) phone
FROM users t1
LEFT JOIN user_profiles t2
  ON t1.id = t2.user_id
GROUP BY t1.id, t1.name

我要修剪双引号的 4 列是:profile.address1、profile.city、profile.postal_code 和 profile.phone 列。我相信代码会是这样的:

TRIM(BOTH '"' FROM profile.address1) AS trimmed_profile.address1 FROM user_profiles ...但我不太确定它是否可以集成到上面

最佳答案

它不是trim(),你需要使用replace()

mysql> select replace('"stackoverflow"','"','') as str;
+---------------+
| str           |
+---------------+
| stackoverflow |
+---------------+
1 row in set (0.00 sec)

所以在你的情况下你可以使用一些东西

MAX(CASE WHEN replace(t2.profile_key,'"','') = 'profile.address1' THEN t2.profile_value END) address 

其他人也是如此。

关于mysql - 将修剪功能添加到现有的sql查询中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27310144/

相关文章:

MySQL:检查子集中的所有值是否在另一个表中并输出相应的ID

mysql:仅当日期每天至少存在一次时才需要记录,该日期应从当前日期时间起重复 4 天

mysql - SQL - 返回具有最高计数的行

javascript - Joomla 加载的旧版本 bootstrap

mysql - 您将如何设计这个数据库?个人和团体所有权

javascript - 如何正确排序我的评论/回复/对回复数据的回复

javascript - Chart.JS 图表未生成

joomla - Joomla中组件内部的图像路径

php - 如何从 Active Directory 填充 Apache 服务器中的 REMOTE_USER(SSO 相关)

PHP 代码如果 url 的一部分包含 *this* 则执行 *this*