Users: 15,000+ | Page Views: 50,000+ | PPS: 2.5
TechDevOps.com
Explore Tools
{Experts in Microsoft SQL Server Operations, Performance, HA/DR, Data Migrations & Cloud Computing}



T-SQL - Extract out the Date within File Names
by BF (Senior MSSQL Operations - Enterprise, Cloud, Strategy)
2016-12-05








Data Prep:

INSERT INTO Photos SELECT 1000, 1, '\\FILES\IMAGES\INDIVIDUAL\Design01_20160101.jpg'
INSERT INTO Photos SELECT 1000, 2, '\\FILES\IMAGES\INDIVIDUAL\Design01_20160101.jpg'
INSERT INTO Photos SELECT 1000, 3, '\\FILES\IMAGES\INDIVIDUAL\Design01_20160101.jpg'
INSERT INTO Photos SELECT 1000, 4, '\\FILES\IMAGES\INDIVIDUAL\Design01_20160102.jpg'
INSERT INTO Photos SELECT 1000, 5, '\\FILES\IMAGES\INDIVIDUAL\Design01_20160107.jpg'


Task: Extract out the date into a separate field for analysis


Solution: SUBSTRING & PATINDEX Functions with a Regular Expression

Use the PATINDEX(Pattern Index Function), with a REGEX, to find a pattern which will indicate the Start Position for the SUBSTRING Function.
(i.e. you can use the PATINDEX function to look for a specific pattern and not only just a specific string as in many
use cases).

SELECT
IndividualID,
PhotoID,
PhotoPath,
SUBSTRING(PhotoPath, PATINDEX('%[2][0][0-9][0-9][0-9][0-9][0-9][0-9]%', PhotoPath), 8) AS 'PhotoPathExtractedDate'
FROM dbo.Photos





Code Assumptions:
- The Date format is always {YearMonthDay}: ex. 20160101 (Integer)
- The Year must start with [2][0]
- The Year is 4 characters in length, Month is 2 characters and Day is 2 characters


Resources:

PATINDEX (Transact-SQL)

SUBSTRING (Transact-SQL)

Comparing CHARINDEX and PATINDEX