Php 在SQLServer2005中将日期列转换为ODBC规范格式
我正在处理在MicrosoftSQLServer2008中将日期列转换为ODBC规范格式的问题 我在php中有以下SQL查询:Php 在SQLServer2005中将日期列转换为ODBC规范格式,php,sql,sql-server,sql-server-2008,date,Php,Sql,Sql Server,Sql Server 2008,Date,我正在处理在MicrosoftSQLServer2008中将日期列转换为ODBC规范格式的问题 我在php中有以下SQL查询: $sql_query = "UPDATE [$connectionInfo[Database]].[dbo].[log_record] SET [lock]='0' WHERE CONVERT [Date] = '".json_encode($value['Date']['date'])."' 基本上,部分”.json_encode($value['Date']['D
$sql_query = "UPDATE [$connectionInfo[Database]].[dbo].[log_record] SET [lock]='0' WHERE CONVERT [Date] = '".json_encode($value['Date']['date'])."'
基本上,部分”.json_encode($value['Date']['Date'])。“
工作并打印为”“2017-06-01 00:00:00”
。但问题在于[日期]栏。我如何比较它们?它会生成以下错误:
错误:从转换日期和/或时间时转换失败
字符串。查询:更新[dba\U sql].[dbo].[log\U记录]集
[lock]=“0”,其中[Date]=“2017-06-01 00:00:00”
我尝试了以下几点,但没有成功:
$sql_query = "UPDATE [$connectionInfo[Database]].[dbo].[log_record] SET [lock]='0' WHERE CONVERT CONVERT(varchar, Date, 120) = '".json_encode($value['Date']['date'])."'
去掉双引号,删除代码中挂起的
convert
。无需将表中的日期转换为字符类型进行比较
以下内容有效:选择转换(日期'2017-06-01 00:00:00')
这不是:选择转换(日期“2017-06-01 00:00:00”)
rextester演示:
另请注意:SQL Server中唯一真正安全的日期/时间文本格式,至少对于
datetime
和smalldatetime
,是:YYYYMMDD
和YYYY-MM-DDThh:MM:ss[.nnn]
参考:
例如,如果您的语言设置隐式地将dateformat
设置为dmy
,那么两个不同转换的相同输入可以产生不同的输出,如果不是错误:
set language 'british';
select toDatatype = 'datetime' ,val = convert(char(10),convert(datetime,'2017-06-01 00:00:00'),120)
union all
select toDatatype = 'date', val = convert(char(10),convert(date,'2017-06-01 00:00:00'),120)
返回:
+------------+------------+
| toDatatype | val |
+------------+------------+
| datetime | 2017-01-06 |
| date | 2017-06-01 |
+------------+------------+
而
selectconvert(datetime,'2017-06-13')
将返回一个错误,其中asselectconvert(date,'2017-06-13')
将返回2017-06-13去掉双引号,并删除代码中挂起的convert
。无需将表中的日期转换为字符类型进行比较
以下内容有效:选择转换(日期'2017-06-01 00:00:00')
这不是:选择转换(日期“2017-06-01 00:00:00”)
rextester演示:
另请注意:SQL Server中唯一真正安全的日期/时间文本格式,至少对于datetime
和smalldatetime
,是:YYYYMMDD
和YYYY-MM-DDThh:MM:ss[.nnn]
参考:
例如,如果您的语言设置隐式地将dateformat
设置为dmy
,那么两个不同转换的相同输入可以产生不同的输出,如果不是错误:
set language 'british';
select toDatatype = 'datetime' ,val = convert(char(10),convert(datetime,'2017-06-01 00:00:00'),120)
union all
select toDatatype = 'date', val = convert(char(10),convert(date,'2017-06-01 00:00:00'),120)
返回:
+------------+------------+
| toDatatype | val |
+------------+------------+
| datetime | 2017-01-06 |
| date | 2017-06-01 |
+------------+------------+
而selectconvert(datetime,'2017-06-13')
将返回一个错误,其中asselectconvert(date,'2017-06-13')
将返回2017-06-13我尝试了它,但它不起作用。下面是我的尝试:$sql_query=“UPDATE[$connectionInfo[Database]].[dbo].[form_record]SET[lock]='0',其中CONVERT(Date,'2017-06-01 00:00:00')='”。json_encode($value['Date']['Date'])。“'AND[form u name]='.$value['form name'.'和[I/O.][I/O]='value['I/O'.''.''.''.''''.'和[facility]='value['@安德鲁,这不是我的建议。您的错误显示为其中[Date]='“2017-06-01 00:00:00”
。看到日期前后的双引号了吗?扔掉那些。我试过了,但没用。下面是我的尝试:$sql_query=“UPDATE[$connectionInfo[Database]].[dbo].[form_record]SET[lock]='0',其中CONVERT(Date,'2017-06-01 00:00:00')='”。json_encode($value['Date']['Date'])。“'AND[form u name]='.$value['form name'.'和[I/O.][I/O]='value['I/O'.''.''.''.''''.'和[facility]='value['@安德鲁,这不是我的建议。您的错误显示为其中[Date]='“2017-06-01 00:00:00”
。看到日期前后的双引号了吗?扔掉那些。