Link to home
Start Free TrialLog in
Avatar of ScuzzyJo
ScuzzyJoFlag for United Kingdom of Great Britain and Northern Ireland

asked on

MS SQL 2012 Problem with converting date

Hi All

I've adapted the following from a question I asked on here to convert nvarchar to a date into a new table:

SELECT *
INTO T_1213_Pres_Start_Date
FROM (
        SELECT *, convert(smalldatetime,Pres_Start, 103) as Pres_Start_date
        FROM T_1213_OnlySSN
        WHERE ISDATE(Pres_Start) = 1
     ) as Pres_Start_Date;

The resulting table doesn't have all the records in it that I would expect, e.g. for one record, the original Pres_Start was 26/01/2013 and that record isn't copied over.  I really don't understand why as I've used "103" to signify a British date format.

Please could someone tell me where I'm going wrong?

Thanks for your help.

Sarah
ASKER CERTIFIED SOLUTION
Avatar of Louis01
Louis01
Flag of South Africa image

Link to home
membership
This solution is only available to members.
To access this solution, you must be a member of Experts Exchange.
Start Free Trial
Avatar of ScuzzyJo

ASKER

Hi Louis

That works perfectly, thanks.  Presumably, if I put it at the beginning of the query, it will apply all the way through and I won't have to keep typing it?

Thanks
Sarah
Avatar of Pratima
try this

CONVERT(NVARCHAR(255),CONVERT(SMALLDATETIME, columnName,105))
Hi Sarah
Setting the DATEFORMAT this way only makes it valid for that session.

You can set it globally for the server as follows:
EXEC sp_configure 'default language', 23 ; --23 = British English

OR for the user:
In Object Explorer, right-click a server and select Properties.
Click the Misc server settings node.
In the Default language for users box, choose the language in which Microsoft SQL Server should display system messages. The default language is English. You want British English.

Louis
Hi

Thanks, Pratima, but Louis beat you to it.

Louis, I think it will be OK for the session for now.

Thanks for your help.

I'll be back in about 2 mins with a different question, no doubt - the joys of learning something new!

Sarah
Louis answered really quickly and his solution worked with no problems.  Fantastic result!
Thanks Sarah, any time!
Louis
p.s. Forgot to say: The reason for the SQL failing in the first place was on the ISDATE function. Unlike CONVERT where you can state the format (103 for dmy for instance) of the input or output, ISDATE uses the format dictated by the 'default language' setting of the server.