Could you please help on how can I extract String1 , String 2 and String 3 to use these in my SQL queries ..
x
DECLARE @SOURCE_FILE VARCHAR(255) = '\longpathfile_name_something_String1_String2_String3_datetime.csv
DECLARE @SOURCE_FILE_NAME VARCHAR(255) = REVERSE(SUBSTRING(REVERSE(@SOURCE_FILE),0 ,CHARINDEX('', REVERSE(@SOURCE_FILE))));
DECLARE @SUB1 VARCHAR(255) = extracted String1;
DECLARE @SUB2 VARCHAR(8) = extracted String2;
DECLARE @SUB3 VARCHAR(4) = extracted String3;
Advertisement
Answer
Please try the following solution.
It is based on tokenization via XML/XQuery.
After that it is very easy to pick up any token based on its position.
SQL
DECLARE @SOURCE_FILE VARCHAR(255) = '\longpathfile_name_something_String1_String2_String3_datetime.csv'
, @separator CHAR(1) = '_';
DECLARE @xml_path XML = TRY_CAST('<root><r><![CDATA[' +
REPLACE(@SOURCE_FILE, @separator, ']]></r><r><![CDATA[') +
']]></r></root>' AS XML);
DECLARE @SUB1 VARCHAR(255) = @xml_path.value('(/root/r[last()-3]/text())[1]', 'VARCHAR(255)')
, @SUB2 VARCHAR(8) = @xml_path.value('(/root/r[last()-2]/text())[1]', 'VARCHAR(8)')
, @SUB3 VARCHAR(14) = @xml_path.value('(/root/r[last()-1]/text())[1]', 'VARCHAR(14)');
-- just to see
SELECT @SUB1 AS Sub1, @SUB2 AS Sub2, @SUB3 AS Sub3;
Output
+---------+---------+---------+
| Sub1 | Sub2 | Sub3 |
+---------+---------+---------+
| String1 | String2 | String3 |
+---------+---------+---------+