4
votes

Convertir SQL BigInt au format 1811011439 au format date-heure

Ma ligne Datetime ressemble à quelque chose comme ce format

Y. 18
M. 11
D. 01 

Elle peut se lire comme ceci

1811011439
1811011439
1811011439
1811011439
1811011439
1811011439

à la première ligne comme vous le voyez

Pourrait-on s'il vous plaît me guider comment puis-je le convertir en format lisible par date.


5 commentaires

Cela ressemble certainement à une valeur "datetime" très étrange - quelle est la logique derrière cela?


Double possible de Convertir de Bigint en valeur datetime


Le nombre BIGINT ici représente quoi? millisecondes? secondes? quelle est la logique ici? Aussi qu'avez-vous essayé de résoudre?


La bonne chose à faire est de changer la façon dont ces données sont stockées - s'il s'agit d'une valeur datetime, elle doit être stockée en tant que DateTime2, pas comme autre chose.


Oh super - années à 2 chiffres. N'avons-nous rien appris de l'an 2000?


3 Réponses :


2
votes

Vous souhaitez convertir une représentation sous forme de chaîne de la valeur datetime (stockée sous forme de bigint) en un format lisible. Dans ce cas, vous pouvez CAST la partie date de la chaîne / bigint à une valeur DATE :

SELECT CAST(SUBSTRING(CAST(1811011439 AS VARCHAR), 1, 6) + ' ' + SUBSTRING(CAST(1811011439 AS VARCHAR), 7, 2) + ':' + SUBSTRING(CAST(1811011439 AS VARCHAR), 9, 2) AS DATETIME)
-- 2018-11-01 14:39:00.000

Je recommande d'utiliser un DATETIME colonne au lieu d'une colonne BIGINT pour stocker des valeurs aime ça. Avec le SELECT suivant, vous obtenez toutes les valeurs de DATETIME :

SELECT CAST(LEFT(CAST(1811011439 AS VARCHAR), 6) AS DATE)
-- 2018-11-01


0 commentaires

2
votes

Pour autant que je comprends la demande, votre date au format VARCHAR sous la forme "AAMMJJHHmm", donc, le moyen le plus simple est:

SELECT CAST(SUBSTRING(YourField, 1, 6) AS DATE) FROM YourTable;

Ou si c'est dans un champ dans une table:

DECLARE @TextDate AS NVARCHAR(20) = '1811011439';
SELECT CAST(SUBSTRING(@TextDate, 1, 6) AS DATE);


0 commentaires

2
votes

Je pense que votre colonne n'est pas un type de données BIGINT , c'est VARCHAR et vous voulez en séparer la date

SELECT CAST(LEFT(CAST(YourColumn AS VARCHAR), 6) AS DATE)
SELECT CAST(LEFT(YourColumn, 6) AS DATE) --It works too

S'il s'agit vraiment d'une colonne BIGINT , convertissez-la simplement en VARCHAR , divisez-la puis CAST en DATE p>

SELECT CAST(LEFT('1811011439', 6) AS DATE)

Pourtant, la bonne réponse à cela est d'utiliser le bon type de données qui est DATETIME


0 commentaires