| Author |
Topic |
|
Maachie
Yak Posting Veteran
69 Posts |
Posted - 2008-11-18 : 15:31:08
|
| I have this data in my col like this. How would i pull out just the date with the isfunction? Can somebody help. I researched on line for help and found nothing. The col datatype is nvarchar. I get error converting.zz01042008CHENZ3zz01102008honorszz01312008COLAKKzz02072008INTSHEWAzz030308GALLISzz041007DISCOGzz043008mattet1zz050707EDENGzz070708MAKEEIzz081707TCSBALAMzz090706STEELGzz122006WALKEL1zzzzbarren2-28-bulkzzzzBAUGHM12-28-bulkzzzzBEBIEG2-28-bulkzzzzBELLT2-28-bulkzzzzBENGALLJ12-18-06-BulkzzzzBENMOYLD12-18-06-Bulkzzzzwrongly craeted |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2008-11-18 : 15:43:32
|
This will give you an ideaDECLARE @Sample TABLE ( data VARCHAR(200) )INSERT @SampleSELECT 'zz01042008CHENZ3' UNION ALLSELECT 'zz01102008honors' UNION ALLSELECT 'zz01312008COLAKK' UNION ALLSELECT 'zz02072008INTSHEWA' UNION ALLSELECT 'zz030308GALLIS' UNION ALLSELECT 'zz041007DISCOG' UNION ALLSELECT 'zz043008mattet1' UNION ALLSELECT 'zz050707EDENG' UNION ALLSELECT 'zz070708MAKEEI' UNION ALLSELECT 'zz081707TCSBALAM' UNION ALLSELECT 'zz090706STEELG' UNION ALLSELECT 'zz122006WALKEL1' UNION ALLSELECT 'zzzzbarren2-28-bulk' UNION ALLSELECT 'zzzzBAUGHM12-28-bulk' UNION ALLSELECT 'zzzzBEBIEG2-28-bulk' UNION ALLSELECT 'zzzzBELLT2-28-bulk' UNION ALLSELECT 'zzzzBENGALLJ12-18-06-Bulk' UNION ALLSELECT 'zzzzBENMOYLD12-18-06-Bulk' UNION ALLSELECT 'zzzzwrongly craeted'SELECT data AS Original, CASE WHEN RIGHT(dta, 1) = '-' THEN LEFT(dta, LEN(dta) - 1) ELSE dta END AS Extracted, ISDATE(CASE WHEN RIGHT(dta, 1) = '-' THEN LEFT(dta, LEN(dta) - 1) ELSE dta END) AS ISDATEFROM ( SELECT data, SUBSTRING(dta, 1, PATINDEX('%[^0-9-]%', dta) - 1) AS dta FROM ( SELECT data, SUBSTRING(data, PATINDEX('%[0-9]%', data), LEN(data)) AS dta FROM @Sample ) AS d ) AS d E 12°55'05.63"N 56°04'39.26" |
 |
|
|
lionofdezert
Aged Yak Warrior
885 Posts |
Posted - 2008-11-18 : 15:45:07
|
| WHAT ABOUT DATA IN RED, It does not look like complete date, as possibly year is missing ?zz01042008CHENZ3zz01102008honorszz01312008COLAKKzz02072008INTSHEWAzz030308GALLISzz041007DISCOGzz043008mattet1zz050707EDENGzz070708MAKEEIzz081707TCSBALAMzz090706STEELGzz122006WALKEL1zzzzbarren2-28-bulkzzzzBAUGHM12-28-bulkzzzzBEBIEG2-28-bulkzzzzBELLT2-28-bulkzzzzBENGALLJ12-18-06-BulkzzzzBENMOYLD12-18-06-Bulkzzzzwrongly |
 |
|
|
Maachie
Yak Posting Veteran
69 Posts |
Posted - 2008-11-18 : 15:47:16
|
| Data in red is also data in the column |
 |
|
|
Maachie
Yak Posting Veteran
69 Posts |
Posted - 2008-11-18 : 16:05:42
|
| Hi Peso,I have a better idea about your approach.However, i get this errorMsg 536, Level 16, State 5, Line 3222Invalid length parameter passed to the SUBSTRING function.where would i make any changes? |
 |
|
|
Maachie
Yak Posting Veteran
69 Posts |
Posted - 2008-11-18 : 16:15:35
|
| Hi Peso,Please disregard my request. I reduced the num of rows and it worked. Thanks a lot. |
 |
|
|
Maachie
Yak Posting Veteran
69 Posts |
Posted - 2008-11-18 : 16:29:20
|
| Hi Peso,Sorry to say that reducing the number of rows quite does not help.Is there any changes i need to make for this error?Msg 536, Level 16, State 5, Line 18Invalid length parameter passed to the SUBSTRING function. |
 |
|
|
SwePeso
Patron Saint of Lost Yaks
30421 Posts |
Posted - 2008-11-18 : 17:08:26
|
[code]SELECT data AS Original, CASE WHEN RIGHT(dta, 1) = '-' THEN LEFT(dta, LEN(dta) - 1) ELSE dta END AS Extracted, ISDATE(CASE WHEN RIGHT(dta, 1) = '-' THEN LEFT(dta, LEN(dta) - 1) ELSE dta END) AS ISDATEFROM ( SELECT data, SUBSTRING(dta, 1, PATINDEX('%[^0-9-]%', dta + ':') - 1) AS dta FROM ( SELECT data, SUBSTRING(data, PATINDEX('%[0-9]%', data), LEN(data)) AS dta FROM @Sample ) AS d ) AS d[/code] E 12°55'05.63"N 56°04'39.26" |
 |
|
|
Maachie
Yak Posting Veteran
69 Posts |
Posted - 2008-11-19 : 11:42:58
|
| Thank you Peso. It worked. I appreciate your help. Maachie |
 |
|
|
|