【问题标题】:how to use concat function in ms sql where condition with like如何在 ms sql 中使用 concat 函数 where 条件与 like
【发布时间】:2013-09-30 10:53:59
【问题描述】:

我在Oracle 中使用以下查询得到了正确的输出。

SELECT COUNT(*) AS CNT FROM MSS WHERE TRIM(UPPER(FIRSTNAME)|| UPPER(SECONDNAME)) LIKE UPPER('qw1')||UPPER('121212')

但是我需要查询MS SQL Server,我们将不胜感激..

【问题讨论】:

  • @bummi 这个问题的所有答案都很糟糕
  • @t-clausen.dk 也许为链接的问题添加一个好的答案可能是另一种选择。
  • @bummi 我为链接问题给出的答案与我为这个问题给出的答案不同。

标签: sql-server concatenation sql-like trim concat


【解决方案1】:

1.创建表 MSS 时,请确保名称(排序规则)上不区分大小写,并且 确保使用 varchar 或 nvarchar 作为名称。

例子:

CREATE TABLE MSS
(
firstname nvarchar(50) collate Latin1_General_CI_AS,
lastname nvarchar(50) collate Latin1_General_CI_AS
)

2.填充表 MSS 时确保名称前没有空格。

例子:

declare @val1 nvarchar(50) = ' qw1 '
declare @val2 nvarchar(50) = ' 121212 '
insert MSS(firstname, lastname)
values(ltrim(@val1), ltrim(@val2))

3.进行更新查询以修复当前数据,使名称不以空格开头。

例子:

UPDATE MSS
SET FIRSTNAME = LTRIM(FIRSTNAME),
SECONDNAME = LTRIM(SECONDNAME)
WHERE FIRSTNAME <> LTRIM(FIRSTNAME)
or SECONDNAME <> LTRIM(SECONDNAME)

4. 编写您的查询。

例子:

SELECT COUNT(*) AS CNT 
FROM MSS
WHERE FIRSTNAME like 'qw1'
and SECONDNAME like '121212'

在比较之前请停止连接列,这会降低性能

【讨论】:

    【解决方案2】:

    试试

    SELECT COUNT(*) AS CNT FROM MSS WHERE LTRIM(RTRIM(UPPER(FIRSTNAME) + UPPER(SECONDNAME))) LIKE UPPER('qw1') + UPPER('121212')
    

    但我不确定您是否不需要比较任何包含您类似条件的内容:

    SELECT COUNT(*) AS CNT FROM MSS WHERE LTRIM(RTRIM(UPPER(FIRSTNAME) + UPPER(SECONDNAME))) LIKE '%' + UPPER('qw1') + UPPER('121212') + '%'
    

    否则,您可以在第一个查询中使用 =

    SELECT COUNT(*) AS CNT FROM MSS WHERE LTRIM(RTRIM(UPPER(FIRSTNAME) + UPPER(SECONDNAME))) = UPPER('qw1') + UPPER('121212')
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多