【问题标题】:Concatenate Two Values On Insert - SQL在插入时连接两个值 - SQL
【发布时间】:2012-03-21 01:40:50
【问题描述】:

我正在尝试完成看似简单的事情,但我无法找到解决方案 - 我可能措辞不正确。

我有一个第三方软件将日期和时间输出为两个单独的值,一个用于日期,另一个用于时间,我需要能够将 INSERT 该数据作为一个 datetime 字段输入 SQL。

第三方软件基于 .NET 的专有语言构建,并使用 SQL Server 2005。

这是我在软件中的两个值:

let cbdate1 = cbdate
let cbtime1 = cbhr & ":" & cbmn & ":00 " & ampm

然后 SQL 将变为:

DOSQL "INSERT INTO Leads (DateTimeField) VALUES (cbdate1 + ' ' + cbtime1)"

所以本质上,我试图在插入表时加入这两个值。这不起作用,我无法指导自己找到合适的答案。

其他信息:

日期 (cbdate1) 显示为“MM/DD/YYYY”,时间简单地加入显示为“HH:MM:00 AM”

【问题讨论】:

  • 你的数据库平台是什么,错误信息是什么,串联的字符串cbdate1 + " " + cbtime1是什么样的?
  • 使用参数化查询而不是连接 SQL。

标签: sql sql-server syntax insert


【解决方案1】:

首先将源代码中的日期和时间值连接在一起,然后将单个值插入数据库。你没有说你使用的是什么编程语言,所以我不能告诉你怎么做。但是,在 VB6 和任何 .NET 语言中都可以轻松完成。

【讨论】:

  • 这是我尝试的第一件事。不幸的是,由于某些奇怪的原因,每当我尝试在插入之前加入这两个变量时,脚本都会在加入时引发错误。
【解决方案2】:

您当前使用的是双引号,您应该改用单引号,因为它是 SQL 中的有效字符串。

 DOSQL "INSERT INTO Leads (DateTimeField) VALUES (cbdate1 + ' ' + cbtime1)"

编辑:

现在,如果您遇到更多问题,可能是因为您的 DateTimeFielddatetime 数据类型。现在您可以在连接转换或将字符串转换为 correct format 之后。

点赞:

 DOSQL "INSERT INTO Leads (DateTimeField) VALUES (Convert(datetime, cbdate1 + ' ' + cbtime1))"

编辑 #2:

如果没有 24 小时部分,您将需要 mon dd yyyy 格式,例如:2012 年 10 月 22 日。否则,您可能必须尝试将时间部分转换为 24 小时格式。

【讨论】:

  • 我已经编辑了问题中的语句,它是我正在使用的代码中的单引号。我只是打错了。
  • @RogueSpear00 修正了我的答案。
  • 数据类型是日期时间,我也没有把它放在我原来的问题中,哈哈。我在这里为错误打 1000 分!
  • @RogueSpear00 好吧,我猜只要您的字符串采用可转换的日期时间字符串格式,就可以解决您的问题
  • 好的 - 所以我将代码放入 SQL 中并尝试复制以查看插入的问题是否存在于我的专有软件(格式化方式)或 SQL 获取数据的方式和处理它。当我尝试按照您建议的转换方式传递数据时,我收到“从字符串转换日期时间时转换失败”。不过这还不错,因为至少现在我知道 SQL 可以正常工作了。
【解决方案3】:

您需要做的是将字符串合并在一起,然后转换为日期时间类型。确保字符串格式正确。 (即 01-01-01、01/01/01 等)

INSERT INTO LEADS (DateTimeField) VALUES (CAST((cbdate1 + ' ' + cbtime1) as datetime)

根据您的需要,请参阅 msdn 以了解输出格式。

http://msdn.microsoft.com/en-us/library/aa226054(v=sql.80).aspx

【讨论】:

  • 01/01/01 不是一个非常合适的格式。 '2001-01-01''20010101' 是。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-24
  • 1970-01-01
  • 2022-01-15
  • 2020-09-27
  • 2022-01-19
  • 2015-07-13
相关资源
最近更新 更多