在SQL Server 2005中将Date列转换为ODBC规范格式

时间:2017-06-05 14:37:01

标签: php sql sql-server sql-server-2008 date

我正在处理在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"'

1 个答案:

答案 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中日期/时间文字的唯一真正安全格式(至少datetimesmalldatetime)是:YYYYMMDDYYYY-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