none
Lunes, martes, o .. en SQL 2008 RRS feed

  • Pregunta

  • Saludos y buenas tardes.

     

    En SQL Server 2008 en un campo tipo date quiero saber: 

    - El numero de la semana (según el numero total de semanas en un año) a que corresponde la fecha

    - El nombre del dia (lunes, martes, etc..)

    - La dirección IP (y el nombre del host) de la maquina desde donde se hace una consulta hacia el servidor.

    Muchas gracias por su ayuda.

     

    Feliz día.

     


    Edward Ocando
    Mi blog
    ocando@hotmail.com
    Desarrollador: VB .NET, C# Visual FoxPro, PHP, JavaScript, Ajax, MS SQL, mySQL.
    lunes, 1 de noviembre de 2010 21:06

Respuestas

  • - El número de la semana:

    select DATEPART(wk, '11/04/2002')

    - El dia de la semana:

    select DATEPART(dw, '11/04/2002')

       Esto te devuelve el número del día de la semana. Me temo que para sacar el nombre tendrás que usar una instrucción CASE con los 7 posibles valores, o un JOIN con una tablita que tenga 7 registros con los 7 nombres.

    - El nombre del host:

    select HOST_NAME()

    No se me ocurre una forma directa de saber la IP. Podrías resolver el nombre mediante DNS en el lado cliente, pero esto puede dar un resultado ambiguo ya que un mismo nombre puede corresponder a muchas IPs, por lo que de esta forma no sacarías cuál fue exactamente la IP concreta que realizó la conexión.

     

    martes, 2 de noviembre de 2010 5:17

Todas las respuestas

  • Tenes que utilizar datepart
    lunes, 1 de noviembre de 2010 21:39
  • Gracias por responder, pero me hubiera gustado un ejemplo.

    Y de los otros punto que me dices..

    Saludos.


    Edward Ocando
    Mi blog
    ocando@hotmail.com
    Desarrollador: VB .NET, C# Visual FoxPro, PHP, JavaScript, Ajax, MS SQL, mySQL.
    lunes, 1 de noviembre de 2010 21:56
  • - El número de la semana:

    select DATEPART(wk, '11/04/2002')

    - El dia de la semana:

    select DATEPART(dw, '11/04/2002')

       Esto te devuelve el número del día de la semana. Me temo que para sacar el nombre tendrás que usar una instrucción CASE con los 7 posibles valores, o un JOIN con una tablita que tenga 7 registros con los 7 nombres.

    - El nombre del host:

    select HOST_NAME()

    No se me ocurre una forma directa de saber la IP. Podrías resolver el nombre mediante DNS en el lado cliente, pero esto puede dar un resultado ambiguo ya que un mismo nombre puede corresponder a muchas IPs, por lo que de esta forma no sacarías cuál fue exactamente la IP concreta que realizó la conexión.

     

    martes, 2 de noviembre de 2010 5:17
  • El nombre de una fecha te lo devuelve la función DATENAME. Por ejemplo, el día de la semana de hoy sería: SELECT DATENAME(dw, GETDATE())
    • Propuesto como respuesta alvar9898 lunes, 27 de noviembre de 2017 7:59
    martes, 2 de noviembre de 2010 13:47
  • Para el IP del cliente pude conseguir el siguiente código, si alguno tienen uno mejor me avisa

     

    set nocount on
    declare @ip varchar(255), @cmd varchar(100) 
    set @cmd = 'ping -n 1 ' + HOST_NAME() 
    create table #temptb (grabfield varchar(255)) 
    insert into #temptb exec master.dbo.xp_cmdshell @cmd 
    select @ip = substring(grabfield, charindex('[',grabfield)+1,
    charindex(']',grabfield)-charindex('[',grabfield)-1) from #temptb where left(grabfield,8) = 'Haciendo' 
    
    select @ip 
    
    drop table #temptb
    set nocount off
    


    Edward Ocando
    Mi blog
    ocando@hotmail.com
    Desarrollador: VB .NET, C# Visual FoxPro, PHP, JavaScript, Ajax, MS SQL, mySQL.
    martes, 2 de noviembre de 2010 17:59
  • Hola.

    El código que comentas no es muy recomendable para ser lanzado desde SQL Server. Si es una cuestión meramente adminsitrativa, no te hará falta resolver esa cuestión con xp_cmdshell, el servidor DNS (que es el que te devuelve el ping) te dirá la IP de ese host.

    Lo más habitual es enviar esa información desde el lado del cliente, donde es muy sencillo determinarlo. Desde el lado de SQL Server, esa información se desvirtúa.Imagina que tienes una aplicación web. Tú no puedes saber qué IP realiza cada petición porque todas provendrán desde el mismo sitio: el servidor web.

    ¿Puedes explicar un poco más tu requerimiento y la utilización que le darás? A lo mejor así podemos darte alguna idea al respecto.


    Alberto López Grande
    SQL Server MVP
    Visita mi blog en http://qwalgrande.blogspot.es/

    martes, 2 de noviembre de 2010 20:06
    Moderador
  • Hola,

    Para sacar el nombre día de la semana yo lo hago así:

    datename(weekday,tbl_MovimientosCont.mrcFechaRegTra) as dia,

    lunes, 28 de mayo de 2018 20:24
  • Excelente, muchas gracias, no sabia como generarlo, ahora si (weekday)
    martes, 16 de octubre de 2018 0:03
  • Yo Lo Hice Así

    Declare @Dias As Table (NumDia Int,Nombre Varchar(15))
    Declare @Mes As Table (NumMes Int,Nombre Varchar(15))
    Declare @NombreDia Varchar(20)
    Declare @NombreMes Varchar(20)
    Declare @Fecha As Date

    Declare @Dia Int
    Declare @MesNum Int


    Insert Into @Dias Values (1,'Domingo')
    Insert Into @Dias Values (2,'Lunes')
    Insert Into @Dias Values (3,'Martes')
    Insert Into @Dias Values (4,'Miercoles')
    Insert Into @Dias Values (5,'Jueves')
    Insert Into @Dias Values (6,'Viernes')
    Insert Into @Dias Values (7,'Sabado')

    Insert Into @Mes Values (1,'Enero')
    Insert Into @Mes Values (2,'Febrero')
    Insert Into @Mes Values (3,'Marzo')
    Insert Into @Mes Values (4,'Abril')
    Insert Into @Mes Values (5,'Mayo')
    Insert Into @Mes Values (6,'Junio')
    Insert Into @Mes Values (7,'Julio')
    Insert Into @Mes Values (8,'Agosto')
    Insert Into @Mes Values (9,'Septiembre')
    Insert Into @Mes Values (10,'Octubre')
    Insert Into @Mes Values (11,'Noviembre')
    Insert Into @Mes Values (12,'Diciembre')

    Set @Fecha = '20190228'

    -- Comensamos llenado

    Select @dia = (DATEPART(dw, @Fecha))
    Select @MesNum  = (DATEPART(MONTH, @Fecha))
    Select  @NombreDia = Nombre From @Dias where NumDia = @Dia 
    Select  @NombreMes = Nombre From @Mes where NumMes = @MesNum 
    Select @fecha AS Fecha, @NombreDia+ ' '  + Convert(Varchar,DATEPART(DAY, @Fecha)) + ' de ' + @NombreMes + ' del ' + Convert(Varchar,DATEPART(YEAR, @Fecha)) As [Fecha a Letras]

    Resultado:

                                         

    Fecha 2019-02-28   

    Fecha A Letras                          Jueves 28 de Febrero del 2019



    viernes, 1 de marzo de 2019 3:19