【问题标题】:SELECT query in SQL Server 2005SQL Server 2005 中的 SELECT 查询
【发布时间】:2012-04-30 06:43:13
【问题描述】:

我在 SQL Server 2005 中的 4 行和 1 列中有以下值。

7,75,8,95,55
8,75,8,95,66 
6,75,86,7,55 
74,75,84,95,55

如果我在 SQL 查询中传递值 7,我需要获取值为 7 的确切行。

【问题讨论】:

  • 单列内的逗号分隔值列表是一个非常糟糕的主意......不要这样做!你违反了关系数据库设计的第一个正常形式,它使像你这样的搜索在这里变得困难和棘手.....

标签: sql-server-2005


【解决方案1】:

您可能希望将“7”匹配为一个数字,但可能其他包含数字“7”的数字(例如,75)。

你用它做的任何事情都会很丑陋,所以如果可能的话,你最好简单地改变一下桌子。我想如果你别无选择,你可以这样做:

select whatever from your_table where 
     your_column like '7,%' or 
     your_column like '%,7,% or 
     your_column like '%,7'

第一个涵盖当“7”是组中的第一个数字时。第二个覆盖在组的中间,第三个覆盖在组的最后一个。

这很难看,除非您要处理非常少量数据,否则它几乎肯定也会非常缓慢。我再说一遍:你真的会很多改成修复基本设计。

【讨论】:

  • 我发布了一个类似的答案......我想我们在这里错过了独立的“7”
  • @chac:是的,如果有可能只有一个值的正确字段,那么我们想添加or your_column = '7'
【解决方案2】:
declare @T table
(
  Col varchar(20)
)

insert into @T values
('7,75,8,95,55'),
('8,75,8,95,66'), 
('6,75,86,7,55'), 
('74,75,84,95,55')

declare @Val varchar(10)
set @Val = '7'

select Col
from @T
where ','+Col+',' like '%,'+@Val+',%'

SE-Data

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-25
    • 2010-09-19
    • 1970-01-01
    • 2012-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多