Время отбрасывания в DateTime

Найдите решение, изменив:

$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');
17
задан abatishchev 21 March 2017 в 17:44
поделиться

13 ответов

Выполните это

SELECT DATEADD(dd, DATEDIFF(d, 0, Getdate()), 0)

изменение Getdate () к Вашему имени столбца для разделения даты

BTW при выполнении сравнения, лучше сделать> = и < так как это будет работать лучше

24
ответ дан 30 November 2019 в 10:50
поделиться

я знаю, что они не то же, но даты, там уехал на 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

-1
ответ дан 30 November 2019 в 10:50
поделиться

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
0
ответ дан 30 November 2019 в 10:50
поделиться

Предложение 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] и индексные поиски на...

0
ответ дан 30 November 2019 в 10:50
поделиться

Мой любимый способ только отобразиться (и выдержать сравнение) в день состоит в том, чтобы использовать:

convert(char(10),getdate(),101)

, где getdate () может быть Вашим значением даты и времени.

я полагаю, что это преобразовывает в формат MM/DD/YYYY

0
ответ дан 30 November 2019 в 10:50
поделиться

Существует много прекрасных предложений для того, чтобы занять время , но , если Вы просто ищете способ сравнить дни, не рассматривая компонент времени просто, делают это:

Select * From SomeTable Where (DateDiff(d, FirstDate, SecondDate) = 0)

таким образом, используйте DateDiff с "d" аргументом, чтобы сделать Ваш выдерживать сравнение, а не "=".

На всякий случай, именно это Вы действительно после...

0
ответ дан 30 November 2019 в 10:50
поделиться

Преобразование в varchar является МЕДЛЕННЫМ. Не делайте этого. Решение Datediff быстро, и если Вы соответствуете дате, Вы не должны даже использовать dateadd (или поочередно преобразовывать в дату и время), так как целое число неявно не сравнит с датой проблемы, как в:

WHERE SomeDate = DateDiff(d, 0, GetDate())

предложение Mark Brittingham на соединении между двумя таблицами довольно хорошо. И выдерживать сравнение только с единственной датой, как предложено, используйте:

WHERE A.Dt >= @SomeDate AND A.Dt < @SomeDate + 1
2
ответ дан 30 November 2019 в 10:50
поделиться

Всеми этими решениями (за исключением сообщения типа данных SQL Server 2008 года) являются находящиеся на строке решения. Они будут работать хорошо в небольших ситуациях с таблицей, но они будут крутиться в очень больших случаях таблицы. Если Вы не находитесь на 2008, у Вас есть опция хранения даты как отдельные целочисленные поля в течение года, месяца и дня или как вычисление с некоторой установленной даты?

1
ответ дан 30 November 2019 в 10:50
поделиться

Вот один путь:

declare @d datetime
set @d = getdate()

select dateadd(d, datediff(day, 0, @d), 0)
3
ответ дан 30 November 2019 в 10:50
поделиться

Мое предложение состоит в том, чтобы выбрать стандарт и изменить одну из таблиц для соответствия другому. Иначе Ваш код приложения оказывается перед необходимостью помнить который использование таблицы который метод навсегда. Выберите стандарт и придерживайтесь его. Если это - действительно всегда полночь в одной таблице и всегда полдень в другой таблице затем, часть времени даты не имеет никакого значения так или иначе.

0
ответ дан 30 November 2019 в 10:50
поделиться

При использовании SQL Server MS 2008, Вы могли бы также измениться на новый тип данных ДАТЫ вместо того, чтобы использовать ДАТУ И ВРЕМЯ.

4
ответ дан 30 November 2019 в 10:50
поделиться

Посмотрите здесь

, Вы хотите первый.

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                          
6
ответ дан 30 November 2019 в 10:50
поделиться

В Oracle Вы могли сделать trunc (Дата и время), которая избавляется от компонента времени. (Существует изменение как trunc (DateTime, 'МЕСЯЦ'), который дает первое свидание месяца.) Не уверенный, если это - стандартный SQL, но я уверен, там был бы подобные функции в других базах данных.

Это должно быть намного быстрее, чем работа с функцией преобразования.

1
ответ дан 30 November 2019 в 10:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: