2015-06-05 2 views
1

Как я могу вставить с запросом такую ​​дату? 2015-06-02T11:18:25.000Сохранить datetime в таблице sql

Я попытался это:

INSERT INTO TABLE (FIELD) VALUES (convert(datetime,'2015-06-02T11:18:25.000')) 

Но я вернулся:

Conversion failed when converting date and/or time from character string. 

Я попытался также:

CONVERT(DATETIME, '2015-06-02T11:18:25.000', 126) 

, но он не работает:

Msg 241, Level 16, State 1, Line 1 
Conversion failed when converting date and/or time from character string. 

Весь запрос:

INSERT INTO BOLLE_TEST_POPPER (QIDDIADE,QNUMBOLLA,QSELEZIONALE,QDATA,QORA,QPRIMAPESATA,QSECONDAPESATA,QIMP1,QIMP2,QIDCAUSALE,QIDCLIENTE,QIDDESTINAZIONE,QIDVETTORE,QIDSUBVETTORE,QIDCAMION,QORATRASITO,QNUMBOLLAINGRESSO,QDATABOLLAINGRESSO,QCOMMITTENTIDELTRASPORTO,QANNOTAZIONI,QANNOTAZIONIINBOLLA,QIDARTICOLO,QQANTITA,QIDAUTISTA,QNUMTESSERA,QNUMGETTONE,VALORETAB1,VALORETAB2,VALORETAB3,VALORETAB4,VALORETAB5,VALORETAB6,VALORETAB7,VALORETAB8,VALORETAB9,VALORETAB10,VALORETESTO1,VALORETESTO2,VALORETESTO3,VALORETESTO4,VALORETESTO5,VALORETESTO6,VALORETESTO7,VALORETESTO8,VALORETESTO9,VALORETESTO10) VALUES ('4','5234','-', 
convert(datetime,'2015-06-02'),convert(datetime,'2015-06-02T11:18:25.000',126),'30020','20230','null','null','4','1','391','50','50','50','500',convert(datetime,'2015-06-02T11:14:06+02:00',126),'-','false','-','-','19','9790.00','1','BK994P','-','-','null','null','null','null','null','null','null','null','null','-','-','-','-','-','-','-','-','-','-'); 

Что не так?

+0

Какой тип данных столбца таблицы? Какая версия SQL Server. Никакой функции преобразования не требуется. –

+0

Возможно, вы сосредоточились на неправильном столбце своего INSERT. Я бы очень подозрительно относился к тем столбцам, где вы пытаетесь вставить строку «null», а не значение «null» (примечание, без кавычек). Каковы типы данных этих столбцов?(Конечно, было бы проще, если бы вы разместили все определение таблицы) –

+0

Также, как общий совет моделирования данных - если вы обнаруживаете, что создаете идентичные столбцы, за исключением числового суффикса, это обычно указывает на то, что эти данные должны быть разделить на отдельную таблицу и использовать отдельные строки, а не столбцы для хранения значений (это помогает, потому что иногда вы хотите запросить все такие данные, что проще, если все это в одном столбце. должны ограничить себя до 10 значений) –

ответ

2

Попробуйте это:

INSERT INTO TABLE (FIELD) VALUES CONVERT(DATETIME, '2015-06-02T11:18:25.000', 126) 

126 относится к ISO8601, который является форматом yyyy-mm-ddThh:mi:ss.mmm.

Это тот же формат, что и строка '2015-06-02T11:18:25.000'.

Для получения дополнительной информации см. here.

Для дат с DateTimeOffset (например '2015-06-02T11:14:06+02:00' - отмечают +02:00 в конце), вы должны будете сделать это:

CONVERT(DATETIME, CONVERT(DATETIMEOFFSET,'2015-06-02T11:14:06+02:00'), 127) 

Полностью фиксированный запрос должен быть:

INSERT INTO BOLLE_TEST_POPPER (QIDDIADE,QNUMBOLLA,QSELEZIONALE,QDATA,QORA,QPRIMAPESATA,QSECONDAPESATA,QIMP1,QIMP2,QIDCAUSALE,QIDCLIENTE,QIDDESTINAZIONE,QIDVETTORE,QIDSUBVETTORE,QIDCAMION,QORATRASITO,QNUMBOLLAINGRESSO,QDATABOLLAINGRESSO,QCOMMITTENTIDELTRASPORTO,QANNOTAZIONI,QANNOTAZIONIINBOLLA,QIDARTICOLO,QQANTITA,QIDAUTISTA,QNUMTESSERA,QNUMGETTONE,VALORETAB1,VALORETAB2,VALORETAB3,VALORETAB4,VALORETAB5,VALORETAB6,VALORETAB7,VALORETAB8,VALORETAB9,VALORETAB10,VALORETESTO1,VALORETESTO2,VALORETESTO3,VALORETESTO4,VALORETESTO5,VALORETESTO6,VALORETESTO7,VALORETESTO8,VALORETESTO9,VALORETESTO10) VALUES ('4','5234','-', 
convert(datetime,'2015-06-02'),convert(datetime,'2015-06-02T11:18:25.000',126),'30020','20230','null','null','4','1','391','50','50','50','500',CONVERT(DATETIME, CONVERT(DATETIMEOFFSET,'2015-06-02T11:14:06+02:00'), 127),'-','false','-','-','19','9790.00','1','BK994P','-','-','null','null','null','null','null','null','null','null','null','-','-','-','-','-','-','-','-','-','-'); 
+0

Это работает, я думаю, вы получаете проблему с другой датой в своем запросе. Если я запустил запрос SELECT CONVERT (DATETIME, '2015-06-02T11: 18: 25.000', 126) - он возвращает дату. – Donal

+0

Это не работает: выберите convert (datetime, '2015-06-02T11: 14: 06 + 02: 00', 126) – Donal

+0

Вам нужно будет преобразовать его следующим образом: CONVERT (DATETIME, CONVERT (DATETIMEOFFSET, '2015) -06-02T11: 14: 06 + 02: 00 '), 127) – Donal

1

Вам нужен формат. В этом случае 126:

INSERT INTO TABLE (FIELD) 
    VALUES (convert(datetime,'2015-06-02T11:18:25.000', 126)) 

Этот список here.

Для часовых поясов, вам нужно 127, так что вам нужно, чтобы исправить положение values:

('4','5234','-', 
    convert(datetime,'2015-06-02'),convert(datetime,'2015-06-02T11:18:25.000',127),'30020','20230','null','null','4','1','391','50','50','50','500',convert(datetime,'2015-06-02T11:14:06+02:00',127),'-','false','-','-','19','9790.00','1','BK994P','-','-','null','null','null','null','null','null','null','null','null','-','-','-','-','-','-','-','-','-','-'); 
+0

Для часовых поясов вам нужно 127, а не 126. –

+0

Это приведет к ошибке преобразования: выберите convert (datetime, '2015-06-02T11: 14: 06 + 02: 00 ', 127), попробуйте. – Donal

+0

@Donal. , , Как забавно. Пример, приведенный в * документации *, также не удается (http://www.sqlfiddle.com/#!6/9eecb7/80). –

1

просто попробовать это. это сработало для меня.

if(isset($_POST['buttonsave'])) 
    { 
     $vfidperiodo  = preg_replace('#[^A-Za-z0-9]#i','',$_POST['idperiodo']); 
     $vfperiodo  = ms_escape_string($_POST['periodo']); 
     $vffechainicio = $_POST['fecha_inicio']; 



     $query_in="INSERT INTO iperiodos (idperiodo, periodo, fecha_inicio) 
      VALUES ('".$vfidperiodo."','".$vfperiodo."','".$vffechainicio."')"; 


     $sql_in = sqlsrv_query($conn,$query_in); 
     if ($sql_in) // Se eejectuto la sentencia SQL? 
        { 
      echo "SQLSuccess"; // Mensaje Afirmativo. 
        } else { 
     die(print_r(sqlsrv_errors(), true)); // Causa del error.  
        } 
     exit(); 
    } 

вот DB и образы формы.

enter image description here enter image description here

Смежные вопросы