2016-11-14 9 views
-3

У меня есть поле в SQL Server с типом данных Datetime. Я выбрать дату просто какSQL SERVER date/time inconsistency

select impDate from tbl1 

То, что происходит это - AM/PM часть не соответствует ... Пожалуйста, смотрите изображение

enter image description here

Как можно видеть, - это, кажется, работайте отлично для всего, начиная с 12:00 и заканчивая, пока не доберется до 12:59 - в этот момент каждый час признается AM - когда 2:46 и 3:17 должен быть PM.

Это то, что это выглядит как в SQL сервере ...

2016-10-18 10: 25: 16,000

EDIT:

DateTime.Now. ToString ("MM/dd/yyyy hh: mm: ss")

+1

почему должно быть 3:17 быть 'PM' ?, вы только что отправил некоторые DateTimes и сказал нам, что это не соответствует – Lamak

+0

я не понимаю вашу проблему ... упорядочение строк не гарантируется без приказа. – Kritner

+0

Я только что добавил элемент и выбрал его из таблицы, и он показал 2:01 утра – BobSki

ответ

4

Я собираюсь угадать, основываясь на информации в вопросе о том, что вы используете строковое значение текущей даты и времени, используя hh, чтобы получить часы, которые являются 12-часовым форматом. Если вы используете привязку строк для создания своего sql (действительно плохо, вы должны использовать параметры) это объясняет проблему.

Однако исправление заключается не в использовании военного времени для вставки даты, а в использовании параметризованного запроса и передаче экземпляра DateTime непосредственно к значению параметра.


Вот краткий пример того, как использовать параметр, чтобы избежать этого типа проблемы в будущем.

Public Function SomeFunction(ByVal dateToInsert As DateTime) 
    Dim sql As String = "INSERT INTO tbl1 (impDate) VALUES(@impDate)" 

    Using cn As New SqlConnection("Your connection string here"), _ 
     cmd As New SqlCommand(sql, cn) 

     cmd.Parameters.Add("@impDate", SqlDbType.DateTime).Value = dateToInsert 
     cmd.ExecuteNonQuery() 
    End Using 
End Function 
+0

Infact i do concatenate - спасибо – BobSki

+0

Я использовал параметры. Я следую тому, что сделали предыдущие программисты, поэтому я в основном делаю то же, что и они. – BobSki

+1

@Bobski - на каком языке вы используете? Если его C# у меня есть готовый пример, который мог бы вам помочь. – Igor

3
// standard (must provide AM/PM, AM assumed if not explicitly provided) 
DateTime.Now.ToString("MM/dd/yyyy hh:mm:ss"); 

против

// military (24 hour clock) 
DateTime.Now.ToString("MM/dd/yyyy HH:mm:ss"); 

Возможно, более важная вещь, чтобы принять во внимание это, вы не должны вставлять strings в datetime, вы должны вставить datetimes. Ваш ToString() подразумевает, что это то, что вы вставляете в базу данных, которая является частью проблемы, из-за которой возникает проблема.

Храните типы данных в правильном типе данных, и это устранит проблему.

+0

спасибо за ваш ответ – BobSki

+2

не проблема, можно было бы избежать много путаницы, если бы вы показали код C#, который выполнял неправильные вставки из get go: D помните, что у нас нет контекст вашей проблемы. http://stackoverflow.com/help/how-to-ask – Kritner