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.
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.
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
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.
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
- Compartir respuesta