【问题标题】:SQL TRIM all values in specific field ( and variable set )SQL TRIM 特定字段(和变量集)中的所有值
【发布时间】:2014-01-23 03:05:16
【问题描述】:

对不起,如果我问的很明显,但我对我的 SQL 是一窍不通。

我指的是标准的wordpress DB安装,虽然这不是wordpress特定的问题,而是更多的mySQL常识..

如果我想更改所有帖子中某个字段的所有值,我通常会这样做:

UPDATE `wp_postmeta` SET `meta_value` = replace(meta_value, 'old_value', 'new_value') WHERE `meta_key` LIKE 'my_meta_key'

问题如下:

在那个特定的 DB 中,INITIAL 值插入时带有空格前缀和后缀,例如:

"city name" 

实际上被插入为

" city name "

当然,作为一个 PHP 人,我立刻想到了 trim() 命令 - 我发现它存在 also in mySQL

所以现在我认为我可以这样做

UPDATE `wp_postmeta` SET `meta_value` = TRIM('meta_value') WHERE `meta_key` LIKE 'my_meta_key'

但它不起作用..

我做错了什么?我知道 mySQL 是“敏感的”(可以这么说)但我尝试了 'meta_value'`meta_value'(抱歉,markdown 限制似乎截断了反引号)

使用replace(meta_value, ' ', '') 会很累,因为一些城市的名称中有空格,而LTRIM RTRIM 对我来说也有点不合适

我也知道有一种方法可以在 sql (@my_var) 中设置变量 但在我的情况下,这样做的正确语法是什么?

SET @my_var = `meta_value`

然后

UPDATE `wp_postmeta` TRIM(@my_var) WHERE `meta_key` LIKE 'my_meta_key'

我当然知道如何在 php 循环中修复它(使用 trim() ),但我想了解在 mySQL 中最好的方法是什么..

【问题讨论】:

    标签: php mysql wordpress trim


    【解决方案1】:

    要引用该列,您需要反引号:

    UPDATE `wp_postmeta`
        SET `meta_value` = TRIM(`meta_value`)
        WHERE `meta_key` LIKE 'my_meta_key';
    

    您的表达式 TRIM('meta_value') 正在修剪字符串 'meta_value',而不是列中的值。

    【讨论】:

    • 你根本不需要``对吗?
    • @Dagon 。 . .事实上,你没有。
    • @GordonLinoff 谢谢,我怀疑这是一个反引号问题,但改变它(就像原来的问题一样)似乎没有帮助。似乎我正在使用的 phpMyAdmin 正在修剪值本身,所以当我检查这些值时,它们没有空格..即使在真正的原始数据库中它们确实有它。 (故意还是错误?)无论如何,如果出现问题,为了安全起见,是否还有 pad 功能可以恢复? (我知道它不在原始问题中,但我找不到任何..)
    • @ObmerkKronen 。 . .本身没有“垫”,但您可以使用 left(concat(col, space(100)), 100) 之类的东西来做同样的事情。
    猜你喜欢
    • 2021-12-21
    • 1970-01-01
    • 1970-01-01
    • 2016-07-29
    • 1970-01-01
    • 2021-07-23
    • 1970-01-01
    相关资源
    最近更新 更多