sql - LTRIM/RTRIM - 但只有第一个/最后一个字符是空格时?

标签 sql sql-server t-sql query-optimization

不确定我还能在哪里问这个问题...但我正在查看我们系统中的一些代码,并在我们的数据清理过程之一中遇到了这个...

UPDATE #X SET
     Email = CASE
                 WHEN LEFT(Email, 1) = ' ' OR RIGHT(Email, 1) = ' '
                 THEN LTRIM(RTRIM(Email))
                 ELSE Email
             END

这对我来说似乎毫无意义,并且不知道为什么它不只是写成:

UPDATE #X SET Email = LTRIM(RTRIM(Email))

是否有一些我不知道的好处或者可能存在一些数据问题,例如隐式转换错误或它正在避免的问题?有很多像这样的不必要的代码,我想开始清理。

它并没有明显节省时间。我运行了统计 IO 和时间以及查询计划,它们都是相同的。

最佳答案

这毫无意义,但出于不同的原因。大概应该写成:

UPDATE #X
    SET Email = LTRIM(RTRIM(Email))
    WHERE Email LIKE ' %' OR EMAIL LIKE '% ';

如果值不会更改,则没有理由尝试更新。

注释:

  • SET 实际上应该放在设置值的第一行。好吧,这是一种审美观点。
  • 我认为LIKE在寻找空格时更清晰。另外,它更强大,因为它可以寻找字符组。而且,它可以是可控制的,允许使用索引(尽管在本例中不是)。

关于sql - LTRIM/RTRIM - 但只有第一个/最后一个字符是空格时?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46228842/

相关文章:

java - jOOQ - 插入多个数据并获取生成的 ID 的一般方法

sql - sys.objects View 中缺少 Sys.Indexes 项 SQL Server 2014

sql - 如何将文本数据类型从 PostgreSQL 数据库转换/转换为链接的 MS SQL Server?

sql - 获取两个日期之间每天 24 小时的最小值/最大值

sql - 插入值语句只能包含 SQL 数据仓库中的常量文字值或变量引用

sql - 我是否需要在执行查询修改我的记录后执行 SELECT 查询才能查看更改后的结果?

php - 根据 mysql sql 查询中的投票类型对总和进行加减

sql - 使用 Subselect 优化查询

sql - 编写 T-SQL 时使用 WHERE + AND + CASE + IN

SQL Server 创建动态列 Login1、Login2、Login3