Преобразование функций даты T-SQL в MySQL

#mysql #sql-server

Вопрос:

Я пытаюсь преобразовать этот код MS SQL Server в MySQL, но я не получаю ту же дату, которую получил бы в MS SQL Server. Кто-нибудь знает, как изменить этот код, чтобы он работал в MySQL? В качестве примера используется отметка времени «2021-08-03 00:00:00».

 SELECT
    FORMAT( DATEADD( DAY, 0, DATEDIFF( DAY, 0, '2021-08-03 00:00:00')), 'd', 'en-us' ) AS 'day'
 

введите описание изображения здесь

Код MYSQL до сих пор.

 SELECT FORMAT (adddate(datediff(NOW(), ma.Timestamp), INTERVAL 0 DAY), 'd', 'en-us') AS day,
 

Комментарии:

1. Что дает вам MySQL?

2. НУЛЕВЫЕ значения @squillman

3. Не могли бы вы опубликовать версию MySQL до сих пор?

4. Вы просто пытаетесь представить любое заданное значение даты/времени как m/d/y ? Или есть какая-то причина для всего шума dateadd и datediff?

5. @need_help12 — Пожалуйста, добавьте его в вопрос в виде текста, а не изображения, чтобы его было легче заметить.

Ответ №1:

Вот как представить даты в m/d/y формате MySQL:

 CREATE TABLE `dates` (d datetime);

INSERT `dates`(d) VALUES('2021-08-31 03:00'),('2021-11-13 05:40');

SELECT DATE_FORMAT(d, '%c/%e/%Y') AS day FROM `dates`;
 

Результаты:

 day
----------
8/31/2021
11/13/2021
 

Я ничего об этом не знал, так как едва могу писать MySQL, но поиск DATE_FORMAT() занял около двух минут.

Кроме того, существующее выражение, которое вы получили от своих коллег, является как излишне сложным, так и реальным снижением производительности из-за FORMAT() функции. Попробуй:

 DECLARE @d date = '2021-08-03T00:00:00.000';
SELECT CONVERT(char(10), @d, 101);
 

Если у вас уже есть дата-время, это нормально, вы все равно можете удалить из него время без шума dateadd и datediff:

 DECLARE @d datetime = '2021-08-03T00:00:00.000';
SELECT CONVERT(char(10), @d, 101);
 

Не то чтобы я считал, что m/d/y это разумный формат в первую очередь, или что вам следует изо всех сил стараться удалить эти ведущие нули…