使用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
提前感谢您的帮助。
以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]'
(假设这里?并且*和#都等于'任意数字或字母')