如何在SQL查询中设置时间格式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在SQL查询中设置时间格式相关的知识,希望对你有一定的参考价值。

SQL的时间格式是:YYYY-MM-DD HH:NN:SS.sss

其sss是毫秒,由于计算机内部时钟晶振的问题,SQL时间最小单位为3毫秒。


一般SQL时间格式处理:大都采取转换格式至datetime格式

例如显示时常用到的:

1、将2015转换为当年的第一天:

select cast(\'2015\'+\'-1-1\' as datetime)

输出结果为:2015-01-01 00:00:00.000


2、将2015-02转换为当年的第一天:

select cast(\'2015-02\'+\'-1\' as datetime)

输出结果为:2015-02-01 00:00:00.000


其实以上可以总结为将具有一定格式的字符串转换为日期类型,只要将年月日补全,后面的时间会默认为0时0分0秒0毫秒

参考技术A --请在下面的代码中选择你需要的。
--注意,将里面的  GETDATE() 代换成你要转化的日期变量。

--最常用的
Select CONVERT(varchar(100), GETDATE(), 120) -- 2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121) -- 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 108  -- 10:57:49
Select CONVERT(varchar(100), GETDATE(), 114  -- 10:57:49:547
--其它日期格式化式样
--日期格式化函数
Select CONVERT(varchar(100), GETDATE(), 0  -- 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 1  -- 05/16/06
Select CONVERT(varchar(100), GETDATE(), 2  -- 06.05.16
Select CONVERT(varchar(100), GETDATE(), 3  -- 16/05/06
Select CONVERT(varchar(100), GETDATE(), 4  -- 16.05.06
Select CONVERT(varchar(100), GETDATE(), 5  -- 16-05-06
Select CONVERT(varchar(100), GETDATE(), 6  -- 16 05 06
Select CONVERT(varchar(100), GETDATE(), 7  -- 05 16, 06
Select CONVERT(varchar(100), GETDATE(), 8  -- 10:57:46
Select CONVERT(varchar(100), GETDATE(), 9  -- 05 16 2006 10:57:46:827AM
Select CONVERT(varchar(100), GETDATE(), 10  -- 05-16-06
Select CONVERT(varchar(100), GETDATE(), 11  -- 06/05/16
Select CONVERT(varchar(100), GETDATE(), 12  -- 060516
Select CONVERT(varchar(100), GETDATE(), 13  -- 16 05 2006 10:57:46:937
Select CONVERT(varchar(100), GETDATE(), 14  -- 10:57:46:967
Select CONVERT(varchar(100), GETDATE(), 20  -- 2006-05-16 10:57:47
Select CONVERT(varchar(100), GETDATE(), 21  -- 2006-05-16 10:57:47.157
Select CONVERT(varchar(100), GETDATE(), 22  -- 05/16/06 10:57:47 AM
Select CONVERT(varchar(100), GETDATE(), 23  -- 2006-05-16
Select CONVERT(varchar(100), GETDATE(), 24  -- 10:57:47
Select CONVERT(varchar(100), GETDATE(), 25  -- 2006-05-16 10:57:47.250
Select CONVERT(varchar(100), GETDATE(), 100  -- 05 16 2006 10:57AM
Select CONVERT(varchar(100), GETDATE(), 101  -- 05/16/2006
Select CONVERT(varchar(100), GETDATE(), 102  -- 2006.05.16
Select CONVERT(varchar(100), GETDATE(), 103  -- 16/05/2006
Select CONVERT(varchar(100), GETDATE(), 104  -- 16.05.2006
Select CONVERT(varchar(100), GETDATE(), 105  -- 16-05-2006
Select CONVERT(varchar(100), GETDATE(), 106  -- 16 05 2006
Select CONVERT(varchar(100), GETDATE(), 107  -- 05 16, 2006
Select CONVERT(varchar(100), GETDATE(), 108  -- 10:57:49
Select CONVERT(varchar(100), GETDATE(), 109  -- 05 16 2006 10:57:49:437AM
Select CONVERT(varchar(100), GETDATE(), 110  -- 05-16-2006
Select CONVERT(varchar(100), GETDATE(), 111  -- 2006/05/16
Select CONVERT(varchar(100), GETDATE(), 112  -- 20060516
Select CONVERT(varchar(100), GETDATE(), 113  -- 16 05 2006 10:57:49:513
Select CONVERT(varchar(100), GETDATE(), 114  -- 10:57:49:547
Select CONVERT(varchar(100), GETDATE(), 120  -- 2006-05-16 10:57:49
Select CONVERT(varchar(100), GETDATE(), 121  -- 2006-05-16 10:57:49.700
Select CONVERT(varchar(100), GETDATE(), 126  -- 2006-05-16T10:57:49.827
Select CONVERT(varchar(100), GETDATE(), 130  -- 18 ???? ?????? 1427 10:57:49:907AM
Select CONVERT(varchar(100), GETDATE(), 131  -- 18/04/1427 10:57:49:920AM

参考技术B 用CONVERT()函数转换

如何在查询中设置 odbc 日期格式

【中文标题】如何在查询中设置 odbc 日期格式【英文标题】:Hoe to set odbc dateformat in query 【发布时间】:2018-01-23 08:38:13 【问题描述】:

我已从 Ms Access 数据库获取数据为 PHP JSON 格式。我在查询中有通过日期参数。数据库数据类型是日期/时间。查询 mm/dd/yyyy 中需要日期格式。

我已经给出了结果

ConnectedResource id #4"status":0,"0":[]

print_r($stmt)

结果资源 id #4 和 goose else 语句。

<?php

    $reg = $_GET['reg'];
    $fdate = $_GET['fdate'];
    $tdate = $_GET['tdate'];
    $yid = $_GET['yid'];


    $sql = "select a.RegNo,c.Standard,b.RollNo,d.Division,b.Std_Name as StudentName,AttendanceDate,Attendance_Type,Remark 
                                         from (((Attendance_mas as a 
                                         inner join Std_Reg as b on a.RegNo = b.RegNo) 
                                         inner join StandardMaster as c on a.Standard = c.stdid) 
                                         inner join DivisionMaster as d on a.Division =d.DivisionID) 
                                         where a.RegNo= $reg and a.AttendanceDate between ($fdate) and 
                                         ($tdate1) and a.yearid = $yid Order by AttendanceDate desc";
    //$sql = "select * from Std_Reg";

    $stmt = odbc_exec($conn, $sql);

print_r($stmt);
$result = [];
do 
    while ($row = odbc_fetch_array($stmt))
       $result[] = $row; 
    
 while (odbc_next_result($stmt));

if(count($result)>0)

    $result1['status']=1;//"Login successfully";
    array_push($result1,$result);

else

     //$result[]="null";
    $result1['status']=0;//"Record not found";
    array_push($result1,$result);

odbc_free_result($stmt);
odbc_close($conn); //Close the connection first

echo json_encode($result1); //You will get the encoded array variable

?>

【问题讨论】:

我不明白这个问题,您是否正在寻找一种方法来格式化您的 date 或将您的 date 传递给查询? $fdate 和 $tdate 传入查询其需要的格式 MM/dd/YYYY。 【参考方案1】:

我建议使用PDO PREPARED STATEMENT 将参数绑定到您的查询:

$reg = $_GET['reg'];
$fdate = date("m/d/Y", strtotime($_GET['fdate']));//THis will format the date
$tdate = date("m/d/Y", strtotime($_GET['tdate']));
$yid = $_GET['yid'];

$sql = "select a.RegNo,c.Standard,b.RollNo,d.Division,b.Std_Name as StudentName,AttendanceDate,Attendance_Type,Remark 
                                     from (((Attendance_mas as a 
                                     inner join Std_Reg as b on a.RegNo = b.RegNo) 
                                     inner join StandardMaster as c on a.Standard = c.stdid) 
                                     inner join DivisionMaster as d on a.Division =d.DivisionID) 
                                     where a.RegNo= ? and a.AttendanceDate between (?) and 
                                     (?) and a.yearid = ? Order by AttendanceDate desc";

$res = odbc_prepare($conn, $sql);
if(!$res) die("could not prepare statement ".$sql);
$parameters = array($reg,$fdate,$tdate,$yid);
if(odbc_execute($res, $parameters)) 
   //Fetch the result
 else 
  // handle error

【讨论】:

以上是关于如何在SQL查询中设置时间格式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Oracle SQL Developer 中设置自定义日期时间格式?

在 SQL 表中设置日期格式 dd/mm/yyyy

在查询中设置字段格式以进行报告

猫鼬如何在模型中设置日期格式

如何在 PhpSpreadSheet 中设置货币格式?

如何在 HTML 日期输入标签中设置日期格式?