非常奇怪的字符转换为时间格式的问题!

英年渐肥 2016-08-12 03:32:53
使用函数strtodate或strtodatetime,转换时间格式的字符串:如‘2016-07-23’为时间格式,并赋值给sql中的参数;发现在服务器端该参数值为空,跟踪sql运行发现参数值为''2016-07-23 00:00:00:000'';没错就是是双引号,不是单引号;太奇怪了。转换的字符串没有额外添加引号啊。怎么会这样呢?
...全文
1087 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
leeky 2016-09-23
  • 打赏
  • 举报
回复
不清楚你的情况,从没遇到过;但你代码是有问题的,引号应为英文字符;另外在使用时间函数时,时间字符串要合法,跟操作系统的时间格式设置有关,比如设置了yyyy-MM-dd...了,如果用 yyyy/MM/dd...的格式就不行。
英年渐肥 2016-08-25
  • 打赏
  • 举报
回复
问题原因已找到。感谢大家。具体情况另行说明
  • 打赏
  • 举报
回复
ms sql server中的datetime类型和delphi中的TDateTime不是一个类型,直接比较是不行的,TDateTime转换成字符串比较可以。实际上datetime类型也不是字符串,而是两个int32,只是SQL语法支持它与字符串直接比较。
英年渐肥 2016-08-24
  • 打赏
  • 举报
回复
数据库需要设置为DOUBLE PRECISION吗。我测试过不需要的啊就是第二种方法
英年渐肥 2016-08-24
  • 打赏
  • 举报
回复
sfldname在Delphi中字段数据类型DateTime,数据库也是DateTime
  • 打赏
  • 举报
回复
字段sfldname是什么类型?Delphi的TDateTime实际是double,数据库字段要设置为DOUBLE PRECISION。
英年渐肥 2016-08-24
  • 打赏
  • 举报
回复
我贴下代码: 第一种是参数方式,这种方式提示值是不是有效的timestamp: stmpsql:='('+sfldname+'>=:'+sParamName+')'; Fqryparams.ParamByName(sParamName).AsDateTime:=StrToDatetime(sconvalue); 第二种方法,不使用参数直接组合成sql语句,提示和第一种方法一样的错误: stmpsql:='('+sfldname+'>='+QuotedStr(sconvalue)+')' 这种方法我在本地直接查询:两层结构是正确的。 第三种方法,不采用参数方式,提示不正常定义参数对象,提供了不一致不完整的信息: stmpsql:='('+sfldname+'>='+’’‘’+‘2016-01-03 00:00:00:000'+‘’‘’+')' 真是搞不懂了,估计服务器关系了。
英年渐肥 2016-08-24
  • 打赏
  • 举报
回复
如何在Delphi和数据库中进行设计呢。简便方便点
pathletboy 2016-08-23
  • 打赏
  • 举报
回复
检查你赋值给SQL参数部分咯。
英年渐肥 2016-08-23
  • 打赏
  • 举报
回复
其实就是一个使用时间参数的问题,目前用了N多方法,无解
英年渐肥 2016-08-23
  • 打赏
  • 举报
回复
我用的是参数传递上去的啊
看那山瞧那水 2016-08-23
  • 打赏
  • 举报
回复
用SQL语句转换 DateValue(str),TimeValue(str) SQL的日期时间和DELPHI的不一样
lyhoo163 2016-08-12
  • 打赏
  • 举报
回复
这是Delphi字符串中,使用双单位引号,作为单引号。 字符串中''2016-07-23 00:00:00:000''='2016-07-23 00:00:00:000'

16,749

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧