【问题标题】:SQL Server SELECT To Return String Including Single QuotesSQL Server SELECT 返回包含单引号的字符串
【发布时间】:2019-03-25 21:20:50
【问题描述】:

我需要从 SELECT 语句中获取带有数据的格式化字符串。问题是我需要它用单引号返回。这是一个例子。

我有一个包含 2 列 TrainingSwipeID (int) 和 ExtendedDate (datetime) 的表。例如,我在表中有一行包含

TrainingSwipeID = 123

培训结束 = 04/23/2019 09:00:00

我需要创建一个 SELECT 语句,它将返回格式化的字符串,例如 {'TrainingSwipeID':123,'TrainingEnd':04/23/2019 09:00:00}

我研究并发现您可以使用双单引号来解决此问题。我尝试了以下操作,但没有成功,我收到以下错误“将 varchar 值 '{'TrainingSwipeID':' 转换为数据类型 int 时转换失败。”

SELECT '{''TrainingSwipeID'':' + TrainingSwipeID + '''TrainingEnd'':' + TrainingEnd + '}' 
AS MyFormattedString 
FROM TrainingSwipe

谁能帮忙?

【问题讨论】:

  • 将 TrainingSwipeID 替换为 convert(varchar(x), TrainingSwipeID),其中 x 是一个很好的长度来覆盖您的 ID。大概您还需要以特定方式格式化日期。一些样式见here
  • 使用KISS原则。 select concat('{''TrainingSwipeID'':' , TrainingSwipeID, ',''TrainingEnd'':', TrainingEnd, '}')
  • 谢谢@AlexKudryashev。正如您所说,这非常有效并且很简单。 :D

标签: sql sql-server select


【解决方案1】:

数字和日期/时间数据类型的优先级高于字符串数据类型。这就是为什么您需要将数字类型转换为字符串并防止不需要的隐式转换。

SELECT '{''TrainingSwipeID'':' + CAST(TrainingSwipeID AS varchar(15)) 
      + '''TrainingEnd'':' + CONVERT( varchar(20), TrainingEnd , 101) + ' ' 
      + CONVERT( varchar(20), TrainingEnd , 8) + '}' 
AS MyFormattedString 
FROM TrainingSwipe

【讨论】:

  • 谢谢 Luis,我不得不删除第二个 SELECT 但这也可以。 :)
  • 傻我,这是一个复制粘贴问题。现在已经更正了。
【解决方案2】:

我终于使用了@AlexKudryashev 提供的最简单的答案,但 Luis 的答案也很有效。

SELECT CONCAT('{''TrainingSwipeID'':' , TrainingSwipeID, ',''TrainingEnd'':', TrainingEnd, '}')

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-02-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多