Fechas sql server

Estoy tratando de insertar una fecha en una base de datos sql server utilizando un

Datetimepicker. El tipo de dato es integer y me gustaría saber como puedo convertir la fecha del datetimepicker en un valor integer para poder postearlo en sql server.

1 respuesta

Respuesta
1

Sólo tienes que aplicar DateToStr(NombreDateTimePicker.date);

Pero trata de decirme por favor si estás utilizando una sentencia de insert de un TQuery o lo haces mediante el método Post de un TTable.

Lo hago mediante el método Post de un TTable.

Como no tengo el nombre de tu componente, utilizaré nombres ficticios.

Puedes hacer lo siguiente:

TB_Table.FieldByName('NombreDeLaColumnaDeSQLServer'.AsDateTime:=DateTimePiitcker.DateTime;

TB_Table.Post;

Espero que te sirva, de lo contrario, trata de ser un poco más explícito.

Me parece muy bien pero hay un pequeño problema.

el campo fecha de la base de datos es del tipo integer no datetime,

lo que necesito es convertir la información del datetimepicker que es del tipo datetime

a integer para poder guardarlo en la base de datos.

Puedes enviarme el script de la tabla de SQL donde deseas insertar, ya que SQL hace conversiones de manera implícita o explícita dependiendo de el tipo de dato origen y destino, en la documentación de SQL Server hay una tabla que te indica dichas conversiones.

Aquí te envío el script de la tabla, la columna donde deseo insertar la fecha se llama nStartDate y el script es el siguiente:

set ansi_nulls on
go
set quoted_identifier on
go
if not exists (select * from sys.objects where object_id = object_id(n'[dbo].[tb_user]') and type in (n'u'))
begin
create table [dbo].[tb_user](
[nuseridn]
[int] identity(1,1) not null,
[susername]
[nvarchar](96) not null,
[ndepartmentidn]
[int] not null,
[stelnumber]
[varchar](64) not null constraint [df_tb_user_stelnumber] default (''),
[semail]
[nvarchar](100) not null constraint [df_tb_user_semail] default (''),
[suserid]
[varchar](64) not null constraint [df_tb_user_suserid] default (''),
[spassword]
[varchar](64) not null,
[bpassword2]
[binary](32) not null,
[nstartdate]
[int] not null constraint [df_tb_user_nstartdate] default ((0)),
[nenddate]
[int] not null constraint [df_tb_user_nenddate]
default ((0)),
[nadminlevel] [int] not null constraint [df_tb_user_nadminlevel] default
((241)),
[nauthmode] [int] not null,
[nauthlimitcount] [int] not null,
[ntimedapb] [int] not null,
[nencryption] [int] not null,
[nombre] [varchar](50) null,
constraint [pk_tb_userinfo] primary key clustered
(
[nuseridn] asc
)with (pad_index = off, ignore_dup_key = off) on
[primary]
) on [primary]
end

¿Si recibiste mi última recomendación con el ejemplo de encode y decode?

No, no la recibí, podrías enviármelo de nuevo.

Gracias.

Ok, en una forma puedes poner un botón y un edit, en el evento OnClick del botón colocar el siguiente código:

procedure TForm1.Button1Click(Sender: TObject);

var anio,mes,día : word;

Begin

DecodeDate(Date, anio, mes, día);

edit1.Text:=IntToStr(anio)+IntToStr(mes)+IntToStr(día);

end;

Y ahí tienes la fecha como un número entero, además también existe DecodeTime.

Gracias por tu respuesta, pero el valor que me devuelve este procedimiento es exactamente la fecha sin guiones por ejemplo: Si la fecha es 2013-11-20 el procedimiento me devuelve 20131120. Y no es esto lo que estoy buscando. El valor que sql server

le da a una fecha cuando se inserta en un campo integer es un valor muy distinto a los guarismos de la fecha original. Por ejemplo: 2013-11-20 el valor que se despliega en la base de datos es 9897702121. Lo que quiero lograr es obtener ese valor para luego insertarlo en la tabla.

Te refieres al formato de fecha Juliano, porque si es así, ¿la pregunta está mal formulada o no?

¿Sabes cómo ejecutar una función de SQL Server desde delphi?

Aquí te dejo unas funciones que convierten entre formatos de fecha, tienen que ser creadas en sql server:

CREATE FUNCTION DBO.De_JulianoAGregoriano
(
@FechaJuliana INT
) RETURNS DATETIME
AS
BEGIN
RETURN DATEADD(dd, @FechaJuliana - 2415021, 0)
END

GO

CREATE FUNCTION dbo.De_GregorianoAJuliano
(
@FechaGregoriana datetime
) RETURNS INT
AS
BEGIN
RETURN datediff(dd, 0, @FechaGregoriana) + 2415021
END

GO

Si tu ejecutas dichas funciones dentro de una ventana de query de Sql Server como te indico aquí abajo,

select dbo.De_JulianoAGregoriano(2456617) GREGORIANO,
dbo.De_GregorianoAJuliano('2013-11-20') JULIANO

Obtendrás: GREGORIANO JULIANO
2013-11-20 00:00:00.000 2456617

Gracias, era precisamente eso lo que quería,

disculpa por no haber formulado la pregunta

con mas claridad.

Muy agradecido.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas