2009-07-31 10 views
1

J'ai une table avec un champ qui contient des horodatages unix pour chaque enregistrement. Je voudrais retourner chaque ligne où l'année et le mois sont égaux à l'année et au mois en cours.SQL pour comparer deux horodatages unix?

Existe-t-il un moyen simple de faire cela?

Merci

Répondre

1

Cela va convertir votre timestamp unix (qui je suppose est stocké dans une colonne numérique typée de quelque sorte) à un datetime:

SELECT dateadd(s, MyTimeStampCol, '19700101') 

Étant donné que, vous devriez être capable de faire quelque chose comme ceci:

SELECT * --(Your columns) 
FROM MyTable 
WHERE YEAR(dateadd(s, MyTimeStampCol, '19700101')) = year(getdate()) 
AND  month(dateadd(s, MyTimeStampCol, '19700101')) = month(getdate()) 

BTW - Je n'ai pas d'expérience avec timestamp unix, donc je suis en utilisant comme référence:

http://www.unixtimestamp.com/index.php

edit: si vous n'êtes pas sur SQL Server, vous devrez utiliser CURRENT_TIMESTAMP au lieu de getdate

modifier à nouveau: venez y penser, si vous ne l'utilisez SQL Serveur, je ne suis pas sûr que dateadd fonctionnera. Je ne peux pas dire que je travaille presque exclusivement avec SQL Server, n'est-ce pas?

0
man ctime 

Calculer les limites supérieures et inférieures de la valeur temporelle Unix pour le mois et l'année qui vous intéresse, puis faire une simple comparaison, SQL.

0

SQL Server 2005+:

WITH dates AS (
    SELECT t.timestampCol, 
      YEAR(DATEADD(s, t.timestampCol, '19700101')) 'year', 
      MONTH(DATEADD(s, t.timestampCol, '19700101')) 'month' 
     FROM TABLE t) 
SELECT t.* 
FROM TABLE t 
JOIN dates d ON d.timestampCol = t.timestampCol 
WHERE d.year = YEAR(GETDATE()) 
    AND d.month = MONTH(GETDATE()) 

Oracle 9i +:

WITH dates AS (
    SELECT t.timestampCol, 
      EXTRACT(YEAR FROM t.timestampCol + (1/(24*60*60) * 19700101) 'year', 
      EXTRACT(MONTH FROM t.timestampCol + (1/(24*60*60) * 19700101) 'month' 
     FROM TABLE t) 
SELECT t.* 
FROM TABLE t 
JOIN dates d ON d.timestampCol = t.timestampCol 
WHERE d.year = EXTRACT(YEAR FROM SYSDATE) 
    AND d.month = EXTRACT(MONTH FROM SYSDATE) 
Questions connexes