Опираясь на предложение Антонио Скури, которое не было полностью явным, я решил, что код должен читать:
function MakeAnIupBox
--make some more elements here
listPlace = iup.list{}
listPlace.sort = "YES"
listPlace.dropdown = "YES"
--populate the list here
--now handle callbacks
listPlace.action = function(self, text, item, state) PlaceAction(listPlace, text, item, state) end
end
function PlaceAction(ih, text, item, state)
listAddress.REMOVEITEM = "ALL"
if state == 1 then -- a place has been selected
--code here to populate the Addresses list
end
end
Можно просто добавить два.
Time part
из Вашего Date
столбец всегда является нулем Date part
из Вашего Time
столбец является также всегда нулем (основная дата: 1 января 1900)Добавление их возвращает корректный результат.
SELECT Combined = MyDate + MyTime FROM MyTable
Это работает как это из-за способа, которым дата хранится как два 4 байта
Integers
причем левые 4 байтаdate
и причем правильные 4 байтаtime
. Как выполнение$0001 0000 + $0000 0001 = $0001 0001
Date
и Time
типы, представленные в SQL Server 2008
. Если Вы настаиваете на том, чтобы добавлять, можно использовать Combined = CAST(MyDate AS DATETIME) + CAST(MyTime AS DATETIME)
Взгляните на то, Как объединить дату и время к datetime2 в SQL Server? предотвратить потерю точности с помощью SQL Server 2008 и.
Если Вы не используете SQL Server 2008 (т.е. у Вас только есть Тип данных datetime), можно использовать следующее (по общему признанию грубый и готовый) TSQL для достижения того, что Вы хотите:
DECLARE @DateOnly AS datetime
DECLARE @TimeOnly AS datetime
SET @DateOnly = '07 aug 2009 00:00:00'
SET @TimeOnly = '01 jan 1899 10:11:23'
-- Gives Date Only.
SELECT DATEADD(dd, 0, DATEDIFF(dd, 0, @DateOnly))
-- Gives Time Only.
SELECT DATEADD(Day, -DATEDIFF(Day, 0, @TimeOnly), @TimeOnly)
-- Concatenates Date and Time parts.
SELECT
CAST(
DATEADD(dd, 0, DATEDIFF(dd, 0, @DateOnly)) + ' ' +
DATEADD(Day, -DATEDIFF(Day, 0, @TimeOnly), @TimeOnly)
as datetime)
Это грубо и готово, но это работает!
DECLARE @Dates table ([Date] datetime);
DECLARE @Times table ([Time] datetime);
INSERT INTO @Dates VALUES('2009-03-12 00:00:00.000');
INSERT INTO @Dates VALUES('2009-03-26 00:00:00.000');
INSERT INTO @Dates VALUES('2009-03-30 00:00:00.000');
INSERT INTO @Times VALUES('1899-12-30 12:30:00.000');
INSERT INTO @Times VALUES('1899-12-30 10:00:00.000');
INSERT INTO @Times VALUES('1899-12-30 10:00:00.000');
WITH Dates (ID, [Date])
AS (
SELECT ROW_NUMBER() OVER (ORDER BY [Date]), [Date] FROM @Dates
), Times (ID, [Time])
AS (
SELECT ROW_NUMBER() OVER (ORDER BY [Time]), [Time] FROM @Times
)
SELECT Dates.[Date] + Times.[Time] FROM Dates
JOIN Times ON Times.ID = Dates.ID
Печать:
2009-03-12 10:00:00.000
2009-03-26 10:00:00.000
2009-03-30 12:30:00.000
Если фактор времени Вашего столбца даты и элемент даты Вашего столбца времени являются оба нулем затем, ответ Lieven - то, в чем Вы нуждаетесь. Если Вы не можете гарантировать, что это будет всегда иметь место затем, это становится немного более сложным:
SELECT DATEADD(day, 0, DATEDIFF(day, 0, your_date_column)) +
DATEADD(day, 0 - DATEDIFF(day, 0, your_time_column), your_time_column)
FROM your_table
Я столкнулся с подобной ситуацией, когда мне пришлось объединить поля Date и Time с полем DateTime. Ни одно из вышеупомянутых решений не работает, особенно добавление двух полей, так как тип данных для добавления этих двух полей не совпадает.
Я создал решение ниже, где я добавил час, а затем минутную часть к дате. Это прекрасно сработало для меня. Пожалуйста, проверьте это и дайте мне знать, если у вас возникнут какие-либо вопросы.
; при tbl as (выберите StatusTime = '12 / 30/1899 5:17:00 PM ', StatusDate =' 24.07.2009 12:00:00 ') выберите DATEADD (MI, DATEPART (MINUTE, CAST (tbl.StatusTime AS TIME)), DATEADD (HH, DATEPART (HOUR, CAST (tbl.StatusTime AS TIME))), CAST (tbl.StatusDate as DATETIME))) из таблицы
Результат: 2019- 07-24 17: 17: 00.000
Преобразуйте первую дату, хранящуюся в поле datetime, в строку, затем преобразуйте время, хранящееся в поле datetime, в строку, добавьте два и преобразуйте обратно в поле datetime, используя известные форматы преобразования. .
Convert(datetime, Convert(char(10), MYDATETIMEFIELD, 103) + ' ' + Convert(char(8), MYTIMEFIELD, 108), 103)
Если оба ваших поля - datetime, тогда просто добавление их будет работать.
например:
Объявить @d datetime, @t datetime
установить @d = '2009-03-12 00: 00: 00.000';
установить @t = '1899- 12-30 12:30:00.000 ';
select @d + @t
Если вы использовали тип данных Date & Time, просто приведите время к datetime
например:
Declare @d date, @ t time
set @d = '2009-03-12';
set @t = '12: 30: 00.000 ';
выберите @d + cast (@t as datetime)