我需要在数据库中搜索两个特定的值,它们是出现在每行注释中的C1和C5。
但是,有些笔记包含诸如 C128、C523、C100 之类的信息——我不想拉这些。
更复杂的是,有些音符本身包含 C1 和 C5,例如在数字后面直接有一个空格,但有些音符包含 C1 和 C5,字母紧跟在它们后面,例如 C1DANNY、C5CLAIRE、C1RUN – 我确实需要拉这些以及那些只说 C1 和 C5 的音符。
例如数据库
ID Notes
1 C1
2 C128
3 C5
4 C1
5 C1DANNY
6 C25
7 C1RUN
8 C10
9 C523
10 C5!
所以从上面的数据库中,我只想拉行:1、3、4、5、7 和 10。
我不想拉任何在第二个数字之后有数字的东西,例如上面的第 8 行。我确实想提取除第二个数字之后的数字(例如第 3 行和第 10 行(之外的任何字符。
我还应该提到我一直在阅读我可以在这里使用哪些通配符 https://www.w3schools.com/sql/sql_wildcards.asp 但我觉得我可能需要使用 IF 语句来循环并精确检查每个注释中包含的内容,但数据库非常大(数十万行(。
以前的工作人员已经编写了一些代码。有问题的代码是:
(
esl.log_text LIKE 'C1%' OR
esl.log_text LIKE 'C5%' OR
esl.log_text LIKE '%' + CHAR(10) + 'C1%' OR
esl.log_text LIKE '%' + CHAR(10) + 'C5%' OR
esl.log_text LIKE '%' + CHAR(13) + 'C1%' OR
esl.log_text LIKE '%' + CHAR(13) + 'C5%'
)
不幸的是,这似乎是拉动包括C10的线。 我是SQL和Stack Overflow的新手,任何关于我可以使用什么代码来实现这一点的帮助将不胜感激。
你可以试试这个:
SELECT Notes
FROM dbo.Testing_Code AS T0
WHERE (LEFT(Notes, 2) IN ('C1', 'C5')) AND (ISNUMERIC(SUBSTRING(Notes, 3, 20)) = 0)