使用SQL Server - c#查询数据

本文关键字:查询 数据 SQL Server 使用 | 更新日期: 2023-09-27 18:03:37

如何在SQL服务器中执行具有此数据的搜索

?DB203143#F####**
1A4F4N8BX600#####
123H9E3W#9Y1#####

当字段中有特殊字符?#**时,等于任意字符(a-z)和任意数字(0-9)。

? = any letters(a-z) or any numbers(0-9)
# = any letters(a-z) or any numbers(0-9)
* = any letters(a-z) or any numbers(0-9)

数据库中有这些数据:

ID: ?DB203143#F####**
Model: TestData

当我搜索:

ID: adb20314431f123456 OR 1DB2031431FFFFFFF OR 0DB2031435F1F05HJ

这个数据必须返回,我可以得到模型TestData

提前感谢您的帮助。

使用SQL Server - c#查询数据

以Greg的回答为基础,如果您试图搜索该字符串的所有列和表,您可以对列列表动态地执行一些操作。这将为您提供相应表和模式中所有列的列表。

select
    s.name as SchemaName,
    t.name as TableName,
    c.name as ColumnName
from sys.tables as t
join sys.schemas as s
  on t.schema_id = s.schema_id
join sys.columns as c
  on t.object_id = c.object_id

我不是100%确定我理解你的#和*约定,但假设你的意思是#为任何数字和*为任何字符,你可以使用几个元异步变量与SQL Server的LIKE函数:

例如:

SELECT
  column1,
  column2
FROM
  testdb
WHERE
  column1 LIKE '?DB203143[0-9]F[0-9][0-9][0-9][0-9]__';

这里的相关特性是,您可以在方括号内指定一个字符范围,以匹配该范围内的任何字符,并且您可以使用下划线来代表任何单个字符。(这将包括字母,数字,标点符号,空格等)

如果你想匹配任何字母或数字,但你想排除其他东西,比如标点符号,你可以(以一种有点难看的方式)通过在方括号内包含你想要匹配的每个字符,比如:

[abcdefghjijklmnopqrtuvwxyz0123456789]

表示要匹配字符的每个位置。不可否认,如果你匹配像上面这样的长序列,这就变得有点难看了。DB203143#F####**'应该是这样的:

LIKE '[abcdefghjijklmnopqrtuvwxyz0123456789]DB203143[abcdefghjijklmnopqrtuvwxyz0123456789]F[abcdefghjijklmnopqrtuvwxyz0123456789][abcdefghjijklmnopqrtuvwxyz0123456789][abcdefghjijklmnopqrtuvwxyz0123456789][abcdefghjijklmnopqrtuvwxyz0123456789][abcdefghjijklmnopqrtuvwxyz0123456789][abcdefghjijklmnopqrtuvwxyz0123456789]'

(假设这里?并且*和#都等于'任意数字或字母')