Попытка сократить сохраненное значение даты и времени с помощью функции преобразования SQL

#php #mysql #datetime

#php #mysql #datetime

Вопрос:

Я новичок в использовании этой convert функции. Я пытаюсь сократить значение даты и времени из моей таблицы. В настоящее время мои значения даты и времени выглядят примерно так, 2016-10-14 16:51:41 , но я бы хотел, чтобы это выглядело примерно как мм / дд / гг.

Я не знаю, правильный ли это подход (не должен быть, поскольку он не работает), но я сгенерировал запрос с помощью convert функции, а затем извлек данные с помощью a mysqli_fetch_array .

Вот код, который я использую:

 $sql = "SELECT id, time, CONVERT(VARCHAR(11), time) as something FROM tableName";
$query = mysqli_query($db, $sql);
$statusnumrows = mysqli_num_rows($query);

// Gather data about parent pm's
if($statusnumrows > 0){
    while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) {
        $time= $row["time"];
    }
}
 

Time это имя столбца, который имеет тип datetime.

Заранее спасибо за предложения / советы.

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

1. Основываясь на вашем коде, я предполагаю, что вы используете MySQL, поэтому я меняю теги. Добавьте также тег PHP.

Ответ №1:

Вы должны хранить datetime в своей БД в соответствующих типах данных, таких как datetime и т. Д.

Как я вижу, вы используете PHP, если вам нужно ВЫВЕСТИ это значение даты и времени в каком-либо интерфейсе (например, на странице HTML), вы должны использовать функции PHP для преобразования даты в нужный вам формат. Это хорошая практика

БД должна ХРАНИТЬ данные, но форматирование является проблемой интерфейса.

Простой пример strtotime() и date() :

 $Date = "2016-10-15";
$newDate = date("m/d/Y", strtotime($Date));
 

Вы можете прочитать документы на сайте PHP: strtotime и date

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

1. Спасибо за вашу помощь! Это сработало отлично! Еще раз спасибо!

2. Мое удовольствие! 😉

Ответ №2:

Если 2012 вы могли бы использовать формат (не очень эффективный, но предлагает некоторые другие возможности)

 Declare @Date DateTime = GetDate()

Select UsingFormat     = Format(@Date,'MM/dd/yy')
      ,UsingConvert1   = convert(varchar(10),@Date,1)
      ,UsingConvert101 = convert(varchar(10),@Date,101)
 

ВОЗВРАТ

 UsingFormat UsingConvert1   UsingConvert101
10/15/16    10/15/16        10/15/2016
 

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

1. Есть ли у вас какие-либо идеи, почему FORMAT это происходит довольно медленно по сравнению с другими внутренними функциями

2. @Prdp увидел статью и сам провел несколько тестов. Я был в шоке. Я подозреваю, что они пытались упаковать слишком много в функцию. mssqltips.com/sqlservertip/3018 /…

Ответ №3:

Используйте стиль 1 в Convert функции для mm/dd/yy форматирования

 select CONVERT(VARCHAR(20), [time],1) 
From yourtable
 

Если вам нужен mm/dd/yyyy формат, то используйте 101 стиль

 select CONVERT(VARCHAR(20), [time],101) 
From yourtable
 

Ссылка MSDN для функции преобразования с различным стилем: ПРЕОБРАЗОВАТЬ

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

1. Спасибо за ваш ответ! Извините, если это глупый вопрос, но нужно ли мне все еще использовать mysqli_fetch_array? Я пытаюсь отобразить значение времени, но на данный момент мне не повезло.

2. @Millica — Я не имею ни малейшего представления о mysqli_fetch_array том, что я специалист по базам данных.

3. @Millica да, вам нужно использовать mysqli_fetch_array , чтобы извлекать данные из вашей базы данных и каким-то образом выводить их. Но как правильно его использовать — это другой вопрос. Я предлагаю вам поискать PHP.net документы для получения дополнительной информации и примеров. Вам нужно использовать $time= $row["something"]; , потому что вы вызываете этот столбец something в своем запросе. Что приводит вас echo $time после выборки?