【发布时间】:2019-12-13 08:33:50
【问题描述】:
我需要在列名文件名的字符串中找到一个连续的 6 位或 7 位数字。该字符串中包含其他带有破折号的数字(或其他字符,如下划线),但我只需要连续数字
StudentID 需要从文件名中提取。 (我知道数据只是哇,多个供应商,多种文件命名格式是原因。)另一种选择是只列出连续数字的起始位置。
期望的结果:
实际结果:
测试代码:
DROP TABLE #StuID
CREATE TABLE #StuID (
FILENAME VARCHAR(MAX)
,StudentID INT
)
INSERT INTO #StuID
( FILENAME )
VALUES
('Smith John D, 11-23-1980, 1234567.pdf')
,('Doe Jane, _01_22_1980_123456.pdf')
,('John Doe, 567891.pdf' )
--This is what I tried.
SELECT FILENAME
, substring(FileName, patindex('%[0-9][0-9][0-9][0-9][0-9][0-9]%', FileName), 8) AS StudentID
FROM #StuID
【问题讨论】:
-
是否有可能(我认为是的)有一天你会得到一个文件,文件名中的日期不是用破折号或下划线字符格式化的?如果是这样,以下解决方案将为您提供不良数据。他们会在学生 ID 之前的文件中找到 YYYYMMDD 日期或 mmddyyyy 日期......如果有人曾经向您发送一个这样命名的文件。文件的命名约定似乎有点松散。因此,如果这种情况发生,那么迄今为止的解决方案将会失败。
-
我假设,不同的学生发送他们的作业,他们都放在一个文件夹中。每个学生都尽力以一种或另一种有意义的方式命名文件,但他们不遵守教授提供的任何命名规则;-)
-
这实际上是一次性的,继承的问题。我的问题是文件名来自使用不同的供应商,而没有人确保标准化的文件名。从文件名中提取所需的所有数据后,希望这不再是问题。感谢大家的善意和帮助!
标签: sql sql-server tsql sql-server-2014