У меня есть таблица со следующими столбцами
log_id INT PRIMARY KEY
emp_name VARCHAR(7) NOT NULL
date_log VARCHAR(23) NOT NULL
in_am VARCHAR(8) NULL
out_am VARCHAR(4) NULL
total_am VARCHAR(4) NULL
in_pm VARCHAR(4) NULL
out_pm VARCHAR(8) NULL
total_pm VARCHAR(4) NULL
grand_total VARCHAR(4) NULL
id INT Foreign key here
Предположим, я уже получил значение in_am и out_am, и я хочу увидеть разницу между ними. Я сделал это.
select cast(out_am as datetime) - cast(in_am as datetime) from Table
Результат такой:
1900-01-01 00:00:07.000
Но я хочу такой результат
00:00:07
Я пытаюсь сделать это так:
select substring((cast(out_am as datetime) - cast(in_am as datetime)),15,20) from table
Но это не работает.
5 ответов
Просто используйте формат DATETIME 108 для вывода ЧЧ: ММ: СС следующим образом:
SELECT CONVERT(VARCHAR(8), (CAST(out_am AS DATETIME) - CAST(in_am AS DATETIME)), 108) FROM Table
В качестве альтернативы вы можете преобразовать в строку и извлечь компонент времени:…
Если вы знаете, что значения всегда меньше суток, вы можете преобразовать разницу в time
:
select cast(cast(out_am as datetime) - cast(in_am as datetime) as time)
from Table;
В качестве альтернативы вы можете преобразовать в строку и извлечь компонент времени:
select right(convert(varchar(255), cast(out_am as datetime) - cast(in_am as datetime) ), 8)
Вы можете использовать CAST и FORMAT:
SELECT FORMAT(CAST(CAST(out_am AS DATETIME) - CAST(in_am AS DATETIME) AS TIME), N'hh\:mm\:ss')
FROM TABLE
Вы можете ПРИНЯТЬ или ПРЕОБРАЗОВАТЬ эти переменные к типу времени.
И добавьте разницу в секундах к 0 разу.
select
LEFT(DATEADD(SECOND, DATEDIFF(SECOND, convert(time,in_am), convert(time,out_am)), convert(time,'0:0')),8)
from Table;
LEFT используется для получения от времени только переменной в формате HH: MM: SS.
Похожие вопросы
Связанные вопросы
Новые вопросы
sql
Язык структурированных запросов (SQL) - это язык запросов к базам данных. Вопросы должны включать примеры кода, структуру таблицы, примеры данных и тег для используемой реализации СУБД (например, MySQL, PostgreSQL, Oracle, MS SQL Server, IBM DB2 и т. Д.). Если ваш вопрос относится исключительно к конкретной СУБД (использует определенные расширения / функции), используйте вместо этого тег этой СУБД. Ответы на вопросы, помеченные SQL, должны использовать стандарт ISO / IEC SQL.