SQL Server : converting varchar to INT

后端 未结 4 1991
长情又很酷
长情又很酷 2021-02-06 22:14

I am stuck on converting a varchar column UserID to INT. I know, please don\'t ask why this UserID column was not created as

4条回答
  •  暖寄归人
    2021-02-06 22:28

    This question has got 91,000 views so perhaps many people are looking for a more generic solution to the issue in the title "error converting varchar to INT"

    If you are on SQL Server 2012+ one way of handling this invalid data is to use TRY_CAST

    SELECT TRY_CAST (userID AS INT)
    FROM   audit 
    

    On previous versions you could use

    SELECT CASE
             WHEN ISNUMERIC(RTRIM(userID) + '.0e0') = 1
                  AND LEN(userID) <= 11
               THEN CAST(userID AS INT)
           END
    FROM   audit 
    

    Both return NULL if the value cannot be cast.

    In the specific case that you have in your question with known bad values I would use the following however.

    CAST(REPLACE(userID COLLATE Latin1_General_Bin, CHAR(0),'') AS INT)
    

    Trying to replace the null character is often problematic except if using a binary collation.

提交回复
热议问题