Найдите решение, изменив:
$response = Yii::$app->response;
$response->format = \yii\web\Response::FORMAT_XML;
$headers = Yii::$app->response->headers;
$headers->add('Content-Type', 'application/xml');
на
Yii::$app->response->format = \yii\web\Response::FORMAT_RAW;
Yii::$app->response->headers->add('Content-Type', 'text/xml');
Выполните это
SELECT DATEADD(dd, DATEDIFF(d, 0, Getdate()), 0)
изменение Getdate () к Вашему имени столбца для разделения даты
BTW при выполнении сравнения, лучше сделать> = и < так как это будет работать лучше
я знаю, что они не то же, но даты, там уехал на SQL, чтобы легко отбросить время и сохранить просто даты сравнения? Спасибо
хорошо, если тип данных поля smalldatetime вместо [1 113] дата и время , Вы только сможете использовать и обновить даты, время всегда будет 00:00:000 независимо от того, что Вы вставка.
<час>Для предотвращения проблем с датами я лично всегда использую
CONVERT( smalldatetime, @myDate, 103 )
103 (, Вы видите в Справке ), it'a dd/mm/yyyy, и хорошо работает со мной, я действительно использую эту технику, потому что я использую британский/Французский формат даты, и серверы находятся в США, где они изменяют все это :-D
это была единственная идея, которые открываются в мою голову в то время (6 лет назад), и я придерживался его.
, Но, можно думать к, вместо того, чтобы добавить поле DateTime , добавить интервал и поместить число секунд с 01.01.1970, у Вас никогда не будет проблем Даты, и каждый раз, когда необходимо получить Дату, просто вычесть текущую дату в те секунды.
Эта техника очень используется в больших перекрестных странах программ для предотвращения проблем, например, мир известное приложение CRM, названное SuperOffice
StingyJack имеет его правильный, но в зависимости от то, что Вы хотите сделать Вас, могло бы быть лучшим сервером для хранения даты как целого числа, если Вам никогда не нужна часть времени.
create table #datedemo(
id integer primary key identity(1,1) not null
,date datetime not null
,dateint int
)
insert into #datedemo (date)
select '2009-Jan-29 02:12:00'
union all select '2009-Jan-29 16:22:00'
union all select '2009-Jan-30 00:32:00'
union all select '2009-Jan-30 13:42:00'
union all select '2009-Jan-31 01:52:00'
union all select '2009-Feb-01 12:02:00'
update #datedemo set dateint = floor(cast(date as float))
select id,date,dateint,cast(dateint as datetime) from #datedemo
where dateint = floor(cast(cast('2009-Jan-30' as datetime)as float))
drop table #datedemo
Предложение SQLMenaces является, по-моему, самым быстрым способом разделить времена из даты. Это действительно также, однако, заставляет некоторые запросы двинуться с пыхтением как свинья путем удаления способности использовать индексы...
[A] JOIN [B] ON SQLMenace([A].datetime) = SQLMenace([B].datetime)
(Where SQLMenace() is the operation he described *grin*)
Для использования позволяют использование ИНДЕКСОВ на 2-й таблице, ему просто нужен маленький adapation...
[A] JOIN [B] ON [A].datetime >= SQLMenace([B].datetime) AND [A].datetime < SQLMenace([B].datetime)
Это должно вызвать сканирование на [B] и индексные поиски на...
Мой любимый способ только отобразиться (и выдержать сравнение) в день состоит в том, чтобы использовать:
convert(char(10),getdate(),101)
, где getdate () может быть Вашим значением даты и времени.
я полагаю, что это преобразовывает в формат MM/DD/YYYY
Существует много прекрасных предложений для того, чтобы занять время , но , если Вы просто ищете способ сравнить дни, не рассматривая компонент времени просто, делают это:
Select * From SomeTable Where (DateDiff(d, FirstDate, SecondDate) = 0)
таким образом, используйте DateDiff с "d" аргументом, чтобы сделать Ваш выдерживать сравнение, а не "=".
На всякий случай, именно это Вы действительно после...
Преобразование в varchar является МЕДЛЕННЫМ. Не делайте этого. Решение Datediff быстро, и если Вы соответствуете дате, Вы не должны даже использовать dateadd (или поочередно преобразовывать в дату и время), так как целое число неявно не сравнит с датой проблемы, как в:
WHERE SomeDate = DateDiff(d, 0, GetDate())
предложение Mark Brittingham на соединении между двумя таблицами довольно хорошо. И выдерживать сравнение только с единственной датой, как предложено, используйте:
WHERE A.Dt >= @SomeDate AND A.Dt < @SomeDate + 1
Всеми этими решениями (за исключением сообщения типа данных SQL Server 2008 года) являются находящиеся на строке решения. Они будут работать хорошо в небольших ситуациях с таблицей, но они будут крутиться в очень больших случаях таблицы. Если Вы не находитесь на 2008, у Вас есть опция хранения даты как отдельные целочисленные поля в течение года, месяца и дня или как вычисление с некоторой установленной даты?
Вот один путь:
declare @d datetime
set @d = getdate()
select dateadd(d, datediff(day, 0, @d), 0)
Мое предложение состоит в том, чтобы выбрать стандарт и изменить одну из таблиц для соответствия другому. Иначе Ваш код приложения оказывается перед необходимостью помнить который использование таблицы который метод навсегда. Выберите стандарт и придерживайтесь его. Если это - действительно всегда полночь в одной таблице и всегда полдень в другой таблице затем, часть времени даты не имеет никакого значения так или иначе.
При использовании SQL Server MS 2008, Вы могли бы также измениться на новый тип данных ДАТЫ вместо того, чтобы использовать ДАТУ И ВРЕМЯ.
Посмотрите здесь
, Вы хотите первый.
SELECT (CAST(FLOOR(CAST(GETDATE() as FLOAT)) AS DateTime))
не используют преобразований в varchar, они являются медленными.
РЕДАКТИРОВАНИЕ : @feihtthief - Вот является способом заполнить таблицу дат (с 0 разами) от временной таблицы чисел, которая является FAST. Отредактируйте его, чтобы сохранить таблицу чисел, если Вы хотите. Они удобны также.
DECLARE @DaysFromGoLive int
SET @DaysFromGoLive = (SELECT (DATEDIFF(dd,'10/01/2007',GETDATE()) + 1)) /* Days from go live is the starting date of the table */
SELECT TOP 10950 --30 years of days
IDENTITY(INT,1,1) as N
INTO #Numbers
FROM Master.dbo.SysColumns sc1,
Master.dbo.SysColumns sc2
CREATE TABLE [dbo].[TableOfDates](
[fld_date] [datetime] NOT NULL,
CONSTRAINT [PK_TableOfDates] PRIMARY KEY CLUSTERED
(
[fld_date] ASC
)WITH FILLFACTOR = 99 ON [PRIMARY]
) ON [PRIMARY]
INSERT INTO
dbo.TableOfDates
SELECT
DATEADD(dd,nums.n - @DaysFromGoLive,CAST(FLOOR(CAST(GETDATE() as FLOAT)) as DateTime)) as FLD_Date
FROM #Numbers nums
SELECT MIN(FLD_Date) FROM dbo.TableOfDates
SELECT MAX(FLD_Date) FROM dbo.TableOfDates
DROP TABLE #Numbers
В Oracle Вы могли сделать trunc (Дата и время), которая избавляется от компонента времени. (Существует изменение как trunc (DateTime, 'МЕСЯЦ'), который дает первое свидание месяца.) Не уверенный, если это - стандартный SQL, но я уверен, там был бы подобные функции в других базах данных.
Это должно быть намного быстрее, чем работа с функцией преобразования.