Оператор вставки типа SQL - PullRequest
0 голосов
/ 08 февраля 2019

У меня есть проблема, и я не знаю, как решить мою процедуру вставки хранимой, у меня есть проблема с типом данных Время для вставки внутри нее,

У меня была ошибка: преобразование не удалось при преобразовании даты и / или времени изстрока символов.

ALTER PROCEDURE [dbo].[TimbraturaDataImport3]

@BadgeTimbrature varchar(50)

AS

DECLARE 
@Terminale nvarchar(12),
@IdBadge int,
@Year int,
@Month int,
@Day int,
@Time Time(5),
@IO int;

SET @Terminale = SUBSTRING(@BadgeTimbrature, 1, 12);
SET @IdBadge = SUBSTRING(@BadgeTimbrature, 13, 18);
SET @Year = SUBSTRING(@BadgeTimbrature, 19, 20);
SET @Month = SUBSTRING(@BadgeTimbrature, 21, 22);
SET @Day = SUBSTRING(@BadgeTimbrature, 23, 24);
SET @Time = SUBSTRING(@BadgeTimbrature, 25, 28);
SET @IO = SUBSTRING(@BadgeTimbrature, 29, 30);

BEGIN TRANSACTION

INSERT INTO [dbo].[BadgeTimbrature]
           ([Terminale]
           ,[IdBadge]
           ,[Year]
           ,[Month]
           ,[Day]
           ,[Time]
           ,[IO])
     VALUES
           (@Terminale
           ,@IdBadge
           ,@Year
           ,@Month
           ,@Day
           ,@Time
           ,@IO)

COMMIT TRANSACTION 

И в таблице BadgeTimbrature у меня есть столбец [Время] - время (7) и результат его: «19: 32: 00.0000000»

Так что моя SubString Intнапример, 1932, как вставить его в формате времени (19: 32: 00.0000000)?

1 Ответ

0 голосов
/ 08 февраля 2019

Предполагая, что вы используете SQL Server (из вашего кода), вы можете правильно привести значение INT с форматом HHMM к TIME, приведя к VARCHAR сначала и вставив : между ними.

DECLARE @Int INT = 2205

SELECT CONVERT(TIME, STUFF(CONVERT(VARCHAR(10), @Int), 3, 0, ':'))

В этом случае STUFF размещается в позиции 3, заменяя символы 0, строку :.

Если у вас уже есть значение какVARCHAR, просто опустите преобразование:

SET @Time = CONVERT(TIME(5), STUFF(SUBSTRING(@BadgeTimbrature, 25, 28), 3, 0, ':'))
...