Chefranov
@Chefranov
Новичок

Как сделать выборку из базы MS SQL по полю datetime?

Пытаюсь получить данные таблицы с MS SQL Server, колонка имеет формат datetime и вроде правильно все подставляю, но все равно не удается получить отсортированные данные.
spoiler
6Fz87NT.png
HFpncPd.png

php
<?php
                $serverName = ''; // server name
                $cinfo = array(
                    "Database" => "", // database
                    "UID"=>"", // user
                    "PWD"=>"" // pass
                );
                $conn = sqlsrv_connect($serverName, $cinfo);

                if ($conn){
                    echo "connected"."<br/>";
                    $datetimenow = current_time("d.m.Y H:i"); // функция wordpress
                    echo $datetimenow; // 30.05.2020 14:10
                if(($result = sqlsrv_query($conn,"SELECT * FROM dbo.GorElectroTrans WHERE GPS_datetime=$datetimenow")) !== false){
                        while( $obj = sqlsrv_fetch_object( $result )) {
                              echo $obj->Longitude.'<br />';
                        }
                    }
                }else{
                    die(print_r(sqlsrv_errors(), true));
                }
            ?>
  • Вопрос задан
  • 42 просмотра
Решения вопроса 1
tsklab
@tsklab Куратор тега SQL Server
Здесь отвечаю на вопросы.
DECLARE @T DATETIME = '30.05.2020 14:10'
SELECT @T
SELECT CONVERT( VARCHAR, @T, 104 ) + ' ' + LEFT( CONVERT( VARCHAR, @T, 8 ), 5 )
SELECT FORMAT( @T, 'dd.MM.yyyy HH:mm' )

2020-05-30 14:10:00.000
30.05.2020 14:10
30.05.2020 14:10

То есть представление DATETIME на вашей форме отличается от неформатированного значения. Вам нужно форматировать и левую часть:
…
SELECT * 
  FROM dbo.GorElectroTrans 
  WHERE FORMAT(GPS_datetime, 'dd.MM.yyyy HH:mm' ) = $datetimenow
…


А если вам нужно сравнивать с текущим моментом, уберите параметр.
…
SELECT * 
  FROM dbo.GorElectroTrans 
  WHERE GPS_datetime = GETDATE()
…


Или без секунд:
…
SELECT * 
  FROM dbo.GorElectroTrans 
  WHERE CAST( GPS_datetime AS SMALLDATETIME ) = CAST( GETDATE() AS SMALLDATETIME )
…
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы