防止在从sql server输出到csv时删除前导零

防止在从sql server输出到csv时删除前导零,sql,Sql,嗨,我有一个SQL脚本,它将一些数据列输出到csv文件中,其中一列是电话号码。脚本运行良好,但是电话号码中的前导零被删除。现在我知道了为什么在excel中打开包含电话号码的csv时,会从电话号码中删除前导零 我正在苦苦挣扎的是SQL脚本,它将电话号码用双引号括起来,以便在打开时将其解释为文本。请参见下面的“我的sql”: SET @query =' SELECT ''MobilePhoneNumber'' AS MobilePhoneNumber ,''RequestNumber

嗨,我有一个SQL脚本,它将一些数据列输出到csv文件中,其中一列是电话号码。脚本运行良好,但是电话号码中的前导零被删除。现在我知道了为什么在excel中打开包含电话号码的csv时,会从电话号码中删除前导零

我正在苦苦挣扎的是SQL脚本,它将电话号码用双引号括起来,以便在打开时将其解释为文本。请参见下面的“我的sql”:

SET @query ='
SELECT
    ''MobilePhoneNumber'' AS MobilePhoneNumber
    ,''RequestNumber'' AS RequestNumber
    ,''RequestDate'' AS RequestDate
    ,''RequestType'' AS RequestType
    ,''Status'' AS Status
UNION ALL
SELECT 
    [MobilePhoneNumber] --I Want to get this column in the csv as EG "01234123456"
    ,[RequestNumber]
    ,CONVERT(VARCHAR,[RequestDate],120)
    ,[RequestType]
    ,[Status]
FROM [Mobiles].[dbo].[Requests]
WHERE [RequestType] = ''Cease''
    AND DATEDIFF(mm,Requestdate , GETDATE())=1;'
试试这个:

'...
SELECT 
CHAR(34) + [MobilePhoneNumber] + CHAR(34)
...'

试试这个:

'...
SELECT 
CHAR(34) + [MobilePhoneNumber] + CHAR(34)
...'


感谢@KekuSemau的建议,我的解决方案最终将惠及他人:

SET @query ='
SELECT
    ''MobilePhoneNumber'' AS MobilePhoneNumber
    ,''RequestNumber'' AS RequestNumber
    ,''RequestDate'' AS RequestDate
    ,''RequestType'' AS RequestType
    ,''Status'' AS Status
UNION ALL
SELECT 
    CHAR(39) +[MobilePhoneNumber] -- < I simply added the CHAR(39)
    ,[RequestNumber]
    ,CONVERT(VARCHAR,[RequestDate],120)
    ,[RequestType]
    ,[Status]
FROM [Mobiles].[dbo].[Requests]
WHERE [RequestType] = ''Cease''
    AND DATEDIFF(mm,Requestdate , GETDATE())=1;'

感谢@KekuSemau的建议,我的解决方案最终将惠及他人:

SET @query ='
SELECT
    ''MobilePhoneNumber'' AS MobilePhoneNumber
    ,''RequestNumber'' AS RequestNumber
    ,''RequestDate'' AS RequestDate
    ,''RequestType'' AS RequestType
    ,''Status'' AS Status
UNION ALL
SELECT 
    CHAR(39) +[MobilePhoneNumber] -- < I simply added the CHAR(39)
    ,[RequestNumber]
    ,CONVERT(VARCHAR,[RequestDate],120)
    ,[RequestType]
    ,[Status]
FROM [Mobiles].[dbo].[Requests]
WHERE [RequestType] = ''Cease''
    AND DATEDIFF(mm,Requestdate , GETDATE())=1;'

你不能像RequestDate那样将MobilePhoneNumber转换为VARCHAR,或者这仍然会删除零吗?我认为如果你在csv输出中的数字前面添加单引号,excel将正确显示它。我使用了CHAR96+[MobilePhoneNumber],并且它起到了治疗作用。你的标题具有误导性。输出到CSV文件时,前导零似乎没有去除,是Excel在打开CSV时将其删除。顺便说一句,您可以将最终解决方案作为答案发布为“接受”该解决方案。所以其他人可以看到这个问题已经解决了。你不能像RequestDate那样将MobilePhoneNumber转换为VARCHAR,或者这仍然会删除零吗?我认为如果你在csv输出中的数字前面添加单引号,excel将正确显示它我使用的字符96+[MobilePhoneNumber]你的标题有误导性。输出到CSV文件时,前导零似乎没有去除,是Excel在打开CSV时将其删除。顺便说一句,您可以将最终解决方案作为答案发布为“接受”该解决方案。所以其他人可以看到这个问题已经解决了。它确实像预期的那样围绕着电话号码,但excel忽略了它并去掉了零,但我只是这样做了:CHAR96+[MobilePhoneNumber],它工作了,它也打开了:它确实像预期的那样围绕着电话号码,但excel忽略了它并去掉了零,但我只是这么做了:CHAR96+[MobilePhoneNumber],它成功了,它也打开了: