Convert Year string to date

gwarcher
gwarcher used Ask the Experts™
on
I have a table that has a birthdate field inside of it.  The vast majority of these records are just the year (example:  "1975")  There are a few records that have an actual date stamp (example:  "04/04/1980")

Here is my issue.

I am running this through ETL.  I need to either trim the date to just have the year marker or add "01/01" to the existing years to standardize.  I have tried script components to append the 01/01 and I have tried data conversion and derived columns, none of which are working.  Is there something else I may be able to do to approach this?  

Thanks
Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
Qlemo"Batchelor", Developer and EE Topic Advisor
Top Expert 2015
Commented:
An expression like this should allow to get a proper date all time, as long as the date delimiters are not mixed up (dots, slashes etc. mixed):
  case when birthdate like '%/%/%' then birthdate else '01/01/'+birthdate end
Senior DBA
Most Valuable Expert 2018
Top Expert 2014
Commented:
I'd allow for dates of mm-dd-yyyy also, like so:

CASE WHEN LEN(birthdate) = 4 THEN '01/01/' + birthdate ELSE birthdate END

Btw, if you're going to store a date as varchar, the best format is 'YYYYMMDD' -- NO delimiters.  That allows sorting and guarantees that SQL can always correctly interpret the date, regardless of any SQL settings.  [It also saves a little space, but that's not nearly as significant.]
Guy Hengel [angelIII / a3]Billing Engineer
Most Valuable Expert 2014
Top Expert 2009

Commented:
How to Generate Services Revenue the Easiest Way

This Tuesday! Learn key insights about modern cyber protection services & gain practical strategies to skyrocket business:

- What it takes to build a cloud service portfolio
- How to determine which services will help your unique business grow
- Various use-cases and examples

Scott PletcherSenior DBA
Most Valuable Expert 2018
Top Expert 2014

Commented:
Except that article tells you to use mm/dd/yyyy format, which can cause errors (either because you forgot to include a conversion code or used the wrong one).

Instead, always use 'YYYYMMDD' and you NEVER have to specify a format code for a date, EVER.

Author

Commented:
Thank you, It worked as a case statement.
Guy Hengel [angelIII / a3]Billing Engineer
Most Valuable Expert 2014
Top Expert 2009

Commented:
Scott,
where does my article tell to use mm/dd/yyyy format?
given, it does show examples using that format, but I don't tell that you HAVE to use that format?
Scott PletcherSenior DBA
Most Valuable Expert 2018
Top Expert 2014

Commented:
Here's the quote from your aricle:

"
Enough playing; let's see "how to do it the right way".
in MS SQL Server, use the CONVERT function:

INSERT INTO orders ( order_date , ordering_client_id )
VALUES ( CONVERT(DATETIME, '08/31/2009', 101 ), 1 )
"


"How to do it the right way" is telling them to use that format, isn't it?
You NEVER mention using 'YYYYMMDD' instead.

We have offices around the world, as do other companies now I'm sure.
Try this on your local SQL:

SET LANGUAGE german

SELECT CAST('20120117' AS datetime)

SELECT CAST('2012-01-17' AS datetime)

Yes, you can use CONVERT on the second one, but then everyone who needs to use the code has to memorize or look up what style "101" -- or whatever other code is the default for that particular location -- means.  That is, if you get code from, say, Europe, it will NOT use "101", it will use some code you're not familiar with and have to look up, and vice versa.

'YYYYMMDD' is universal and will never have to be changed to work anywhere in the world and no one ever has to waste time looking up date format codes.
Guy Hengel [angelIII / a3]Billing Engineer
Most Valuable Expert 2014
Top Expert 2009

Commented:
I agree with that on a pure engineering level 100%.
and I won't debate long about the format etc.

the main point of the article is:
* make sure you convert/cast your "string" into date at the right time, and avoid implicit conversions.
* it's for beginners, not for "advanced" people like you and me, to get them aware of what issues you can run into if you don't handle dates correctly.
Scott PletcherSenior DBA
Most Valuable Expert 2018
Top Expert 2014

Commented:
Even more vital for beginners to learn correctly from the start -- poor coding is much harder to correct later than teaching good coding to start with.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial