我正在处理在Microsoft SQL Server 2008中将Date列转换为ODBC规范格式的问题。
我在php中有以下SQL查询:
<select class="select2" id="select2">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<select class="select2" id="select3">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<select class="select2" id="select4">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
<select class="select2" id="select5">
<option value="1">1</option>
<option value="2">2</option>
<option value="3">3</option>
<option value="4">4</option>
<option value="5">5</option>
</select>
jQuery:
$("select").on("select2:select", function (evt) {
var element = evt.params.data.element;
var $element = $(element);
$element.detach();
$(this).append($element);
$('.#merchant_referral_customer_gms_id2').trigger("change");
});
基本上,部分$sql_query = "UPDATE [$connectionInfo[Database]].[dbo].[log_record] SET [lock]='0' WHERE CONVERT [Date] = '".json_encode($value['Date']['date'])."'
有效并打印为'".json_encode($value['Date']['date'])."'
。但问题是[日期]专栏。我该如何比较它们?它会生成以下错误:
错误:转换日期和/或时间时转换失败 字符串。 query:UPDATE [dba_sql]。[dbo]。[log_record] SET [lock] ='0'WHERE [日期] ='“2017-06-01 00:00:00”'
我尝试了以下方法,但徒劳无功:
'"2017-06-01 00:00:00"'
答案 0 :(得分:0)
删除双引号,并删除代码中挂起的convert
。无需将表格中的date
转换为字符类型进行比较。
以下内容有效:select convert(date,'2017-06-01 00:00:00')
这不是:select convert(date,'"2017-06-01 00:00:00"')
rextester演示:http://rextester.com/NUNAD13593
另请注意:SQL Server中日期/时间文字的唯一真正安全格式(至少datetime
和smalldatetime
)是:YYYYMMDD
和YYYY-MM-DDThh:mm:ss[.nnn]
参考:Bad habits to kick : mis-handling date / range queries - Aaron Bertrand
例如,如果您的语言设置隐式将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 |
+------------+------------+
和select convert(datetime,'2017-06-13')
会返回错误,而select convert(date,'2017-06-13')
将返回2017-06-13
。