2011-11-14 36 views

Respuesta

185

SQL Server tiene nada que ver con una fecha y hora!

Es solo una representación binaria de un número consecutivo: solo es bueno para asegurarse de que una fila no haya cambiado desde que se leyó.

En las versiones más nuevas de SQL Server, se llama RowVersion - ya que eso es realmente lo que es. Ver el MSDN docs on ROWVERSION:

es un tipo de datos que expone generados automáticamente, números binarios únicos dentro de una base de datos. rowversion generalmente se usa como un mecanismo para las filas de la tabla de estampado de versiones. El tipo de datos rowversion es solo un número creciente y no conserva una fecha o una hora. Para registrar una fecha u hora, utilice un tipo de datos datetime2 .

Así que no puede convertir un servidor SQL Server TIMESTAMP a una fecha/hora - no es sólo una fecha/hora.

Pero si está diciendo timestamp pero realmente quiere decir una columna DATETIME, puede usar cualquiera de esos formatos de fecha válidos descritos en el tema CAST and CONVERT en la ayuda de MSDN. Esos están definidos y soportados "fuera de la caja" por SQL Server. Cualquier otra cosa no es compatible, p. tienes que hacer un montón de fundición manual y concatenación (no recomendado).

El formato que está buscando se ve un poco como el ODBC canónica (estilo = 121):

DECLARE @today DATETIME = SYSDATETIME() 

SELECT CONVERT(VARCHAR(50), @today, 121) 

da:

2011-11-14 10:29:00.470 

SQL Server 2012 will finally have a FORMAT function hacer formato personalizado ... ...

+1

Probablemente mi mayor problema con SQL Server. ¿Por qué llamarlo marca de tiempo si no puedo decir la hora con él? – BelgoCanadian

+0

@BelgoCanadian: pregunta a Sybase: esa es una característica que ha estado en Sybase/SQL Server para siempre ... –

2

Mis compañeros de trabajo me han ayudado con esto:

No está permitido

conversión implícita del tipo de datos varchar a marca de tiempo:

select CONVERT(VARCHAR(10), <tms_column>, 112), count(*) 
from table where <tms_column> > '2012-09-10' 
group by CONVERT(VARCHAR(10), <tms_column>, 112); 

o

select CONVERT(DATE, <tms_column>, 112), count(*) 
from table where <tms_column> > '2012-09-10' 
group by CONVERT(DATE, <tms_column>, 112); 
3

funciona bien, excepto este mensaje. Utilice la función CONVERT para ejecutar esta consulta

Así que sí, marca de tiempo (rowversion) es NO una FECHA :)

Para ser honesto, fidddled alrededor de bastante tiempo a mí mismo para encontrar una manera de convertirlo en una cita.

La mejor manera es convertirlo a INT y comparar. Eso es lo que debe ser este tipo. Si Usted desea una fecha - sólo tiene que añadir una fila de fecha y hora y vivir dichosamente para siempre :)

aplausos mac

0

por qué no intentar FROM_UNIXTIME (UNIX_TIMESTAMP, formato)

+10

Porque esta pregunta se refiere al SQL de Microsoft, no a MySQL. –

2

Algunos de ellos realmente hace encubierta a una fecha-hora desde SQL Server 2008 en adelante.

intente lo siguiente consulta SQL y verá por sí mismo:

select CAST (0x00009CEF00A25634 as datetime) 

Lo anterior dará lugar a 2009-12-30 09: 51: 03: 000, pero me he encontrado con los que realmente no lo hacen mapa a una fecha y hora.

5

Uso de fundido se puede obtener la fecha de un campo de marca de tiempo:

SELECT CAST(timestamp_field AS DATE) FROM tbl_name 
+2

Esto no parece funcionar: 'La conversión explícita de la fecha y hora del tipo de datos a la fecha no está permitida. – jocull

-2

No estoy seguro si me falta algo aquí, pero no puedes convertir la marca de tiempo de esta manera:

CONVERT(VARCHAR,CAST(ZEIT AS DATETIME), 110) 
+0

¿Has probado esto? TIMESTAMP no tiene relación con DATE. –

+0

Lo estoy usando en SQL Server 2008 – Daniel

2

La forma más sencilla de hacerlo es:

SELECT id,name,FROM_UNIXTIME(registration_date) FROM `tbl_registration`; 

Esto le da a la columna de fecha al menos un formato legible . Además, si desea cambiar el formato de te haga clic en here.

+0

parece no ser para versiones anteriores de sql? No puedo encontrarlo con sql 2014 .. – pungggi

Cuestiones relacionadas