由于日期,无法在 sql server 中添加行
Posted
技术标签:
【中文标题】由于日期,无法在 sql server 中添加行【英文标题】:Can't add row in sql server because of date 【发布时间】:2020-02-26 08:48:47 【问题描述】:我有一个 Web 应用程序,我需要在我的 SQL Server 表中插入数据,问题是我的 Apache 日志中有这个错误:
一般错误:241 从字符串转换日期和/或时间时转换失败。
当我直接在 ms sql server 中尝试时,我遇到了同样的错误。 有我的 php 代码:
public function addVisiteClient(Request $request)
require __DIR__.DIRECTORY_SEPARATOR."..".DIRECTORY_SEPARATOR."Entity".DIRECTORY_SEPARATOR."sqlconnect.php";
$idCli = $request->request->has("id")?$request->request->get("id"):"";
$cadre = $request->request->has("cadre")?$request->request->get("cadre"):"";
$type = $request->request->has("type")?$request->request->get("type"):"";
$duree = $request->request->has("duree")?$request->request->get("duree"):"";
$obs = $request->request->has("observation")?$request->request->get("observation"):"";
$dateRelance = $request->request->has("dateRelance")?$request->request->has("dateRelance"):"";
$insert = "INSERT INTO VISITE (CLCLEUNIK, DATERELANCE, DATEVIS, CADREVISITE, TYPE, DUREE, OBERSVAT) VALUES (:idCli, CONVERT(DATETIME, :dateRelance), GETDATE(), :cadre, :type, :duree, :observation)";
$prepare=$pdo2->prepare($insert);
$prepare->execute(array(
":idCli" => $idCli,
":dateRelance" => $dateRelance,
":cadre" => $cadre,
":type" => $type,
":duree" => $duree,
":observation" => $obs
));
$prepare->closeCursor();
return new Response("Ajout effectué");
还有一个数据示例:
INSERT INTO VISITE (CLCLEUNIK, DATERELANCE, DATEVIS, CADREVISITE, TYPE, DUREE, OBERSVAT) VALUES (4080508, CONVERT(DATETIME, '2020-02-27 12:00:00'), GETDATE(), 1, 1, 10, 'test')
【问题讨论】:
这是你的答案吗? ***.com/questions/14119133/… @Dlk 对我不起作用或我误解了 【参考方案1】:您必须使用基于字符串的日期格式,您应该选择一种安全且适用于每个 SQL Server 实例的日期格式,无论日期格式、语言和区域设置如何。
--Format: mon dd yyyy hh:mmAM (or PM)
--result: Dec 7 2018 4:09PM
SELECT convert(varchar, getdate(), 100)
--Format: mm/dd/yyyy
--result: 12/07/2018
SELECT convert(varchar, getdate(), 101)
--Format: yyyy.mm.dd
--result: 2018.12.07
SELECT convert(varchar, getdate(), 102)
--Format: dd/mm/yyyy
--result: 07/12/2018
SELECT convert(varchar, getdate(), 103)
--Format: dd.mm.yyyy
--result: 07.12.2018
SELECT convert(varchar, getdate(), 104)
--Format: dd-mm-yyyy
--result: 07-12-2018
SELECT convert(varchar, getdate(), 105)
--Format: dd mon yyyy
--result: 07 Dec 2018
SELECT convert(varchar, getdate(), 106)
--Format: mon dd, yyyy
--result: Dec 07, 2018
SELECT convert(varchar, getdate(), 107)
--Format: hh:mm:ss
--result: 15:49:24
SELECT convert(varchar, getdate(), 108)
--Format: mon dd yyyy hh:mm:ss:mmmAM (or PM)
--result: Dec 7 2018 3:50:13:540PM
SELECT convert(varchar, getdate(), 109)
--Format: mm-dd-yyyy
--result: 12-07-2018
SELECT convert(varchar, getdate(), 110)
--Format: yyyy/mm/dd -- yyyymmdd - ISO date format - international standard - works with any language setting
--result: 2018/12/07
SELECT convert(varchar, getdate(), 111)
--Format: yyyymmdd
--result: 20181207
SELECT convert(varchar, getdate(), 112)
--Format: dd mon yyyy hh:mm:ss:mmm
--result: 07 Dec 2018 15:53:14:053
SELECT convert(varchar, getdate(), 113)
--Format: hh:mm:ss:mmm(24h)
--result: 15:54:05:693
SELECT convert(varchar, getdate(), 114)
--Format: yyyy-mm-dd hh:mm:ss(24h)
--result: 2018-12-07 15:54:23
SELECT convert(varchar, getdate(), 120)
--Format: yyyy-mm-dd hh:mm:ss.mmm
--result: 2018-12-07 15:55:15.630
SELECT convert(varchar, getdate(), 121)
--Format: yyyy-mm-ddThh:mm:ss.mmm
--result: 2018-12-07T15:55:44.147
SELECT convert(varchar, getdate(), 126)
--Without century (YY) date / datetime conversion - there are exceptions!
--Format: mon dd yyyy hh:mmAM (or PM)
--result: Dec 7 2018 3:56PM
SELECT convert(varchar, getdate(), 0)
--Format: mm/dd/yy
--result: 12/07/18
SELECT convert(varchar, getdate(), 1)
--Format: yy.mm.dd
--result: 18.12.07
SELECT convert(varchar, getdate(), 2)
--Format: dd/mm/yy
--result: 07/12/18
SELECT convert(varchar, getdate(), 3)
--Format: dd.mm.yy
--result: 07.12.18
SELECT convert(varchar, getdate(), 4)
--Format: dd-mm-yy
--result: 07-12-18
SELECT convert(varchar, getdate(), 5)
--Format: dd mon yy
--result: 07 Dec 18
SELECT convert(varchar, getdate(), 6)
--Format: mon dd, yy
--result: Dec 07, 18
SELECT convert(varchar, getdate(), 7)
--Format: hh:mm:ss
--result: 16:02:32
SELECT convert(varchar, getdate(), 8)
--Format: mon dd yyyy hh:mm:ss:mmmAM (or PM)
--result: Dec 7 2018 4:03:02:100PM
SELECT convert(varchar, getdate(), 9)
--Format: mm-dd-yy
--result: 12-07-18
SELECT convert(varchar, getdate(), 10)
--Format: yy/mm/dd
--result: 18/12/07
SELECT convert(varchar, getdate(), 11)
--Format: yymmdd
--result: 181207
SELECT convert(varchar, getdate(), 12)
--Format: dd mon yyyy hh:mm:ss:mmm
--result: 07 Dec 2018 16:05:07:547
SELECT convert(varchar, getdate(), 13)
--Format: hh:mm:ss:mmm(24h)
--result: 16:05:34:363
SELECT convert(varchar, getdate(), 14)
--Format: yyyy-mm-dd hh:mm:ss(24h)
--result: 2018-12-07 16:06:14
SELECT convert(varchar, getdate(), 20)
--Format: yyyy-mm-dd hh:mm:ss.mmm
--result: 2018-12-07 16:06:43.970
SELECT convert(varchar, getdate(), 21)
--Format: mm/dd/yy hh:mm:ss AM (or PM)
--result: 12/07/18 4:06:59 PM
SELECT convert(varchar, getdate(), 22)
--Format: yyyy-mm-dd
--result: 2018-12-07
SELECT convert(varchar, getdate(), 23)
--Format: hh:mm:ss
--result: 16:08:11
SELECT convert(varchar, getdate(), 24)
--Format: yyyy-mm-dd hh:mm:ss.mmm
--result: 2018-12-07 16:08:28.353
SELECT convert(varchar, getdate(), 25)
Convert String to Datetime
Convert Datetime to Date
AND here
查看此答案:Insert converted varchar into datetime sql
【讨论】:
【参考方案2】:使用format('YYYY-m-d H:i:s')
格式化日期参数
$prepare->execute(array(
":idCli" => $idCli,
":dateRelance" => $dateRelance->format('YYYY-m-d H:i:s'),
":cadre" => $cadre,
":type" => $type,
":duree" => $duree,
":observation" => $obs
));
【讨论】:
@NeoKerd,请检查 我刚刚尝试过,现在我得到了这个错误:“SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens” @NeoKerd,已修改,请检查。请注意在保持 SQL 不变的同时尝试此操作(与您的问题相同) 未捕获的 PHP 异常错误:“调用 bool 上的成员函数 format() @NeoKerd,请尝试使用未更改 SQL 的修改后的解决方案(即CONVERT(DATETIME, :dateRelance)
without qoute以上是关于由于日期,无法在 sql server 中添加行的主要内容,如果未能解决你的问题,请参考以下文章
由于启动用户实例的进程失败,无法生成 SQL Server 的用户实例。连接将关闭
在 SQL Server 中读取 JSON 数据时无法从字符串转换为日期时间