martes, 17 de abril de 2018

Caracter de escape


Cómo se implementa un caracter de escape en una consulta con filtro
-- Los corchetes son caracteres especiales, por eso hay que omitirlos


      ,[ColumnName]
      ,…
  FROM [DatabaseName].[dbo].[TableName]
  WHERE TextData like '%![GroupBy1!]%' ESCAPE '!'



viernes, 2 de marzo de 2018

Valor recursivo tipo factorial


sin la necesidad de realizar un while



DECLARE @Valor DECIMAL (18,8)
SET @Valor = 1

 SELECT @Valor = ( 1 + (RateValue/36000)) * @Valor
         FROM [REMATE2G].[Middle].[RateValues]
  WHERE IdRateName = 24
 AND RateDate BETWEEN '2018-02-15' AND '2018-02-28'

 SET @Valor = ((@Valor-1)*36000)/14
 SELECT @VALOR

lunes, 12 de febrero de 2018

SUBIR ARCHIVOS PLANOS A SQL SERVER

A continuación se coloca un ejemplo de cómo subir un archivo plano de texto a una tabla de SQL





















OPCIÓN 1:




CREA LA TABLA Y METE EN DIRECTO LA INFORMACIÓN DEL CONTENIDO SIN SEPARAR COLUMNAS

CREATE TABLE Staging.temp2 (contenido varchar(max))


BULK INSERT Staging.temp2
FROM 'C:\PASO\NombreArchivo.log'
  WITH
  (
    FIELDTERMINATOR = '\r',
    ROWTERMINATOR = '\n'
  );












OPCIÓN 2


SELECT * FROM OPENROWSET (
                           BULK  'C:\PASO\archivo.log'
                           ,SINGLE_CLOB                                             
                         ) AS X



Mete todo el contenido en un solo registro















OPCIÓN 3

Se tiene la ventaja de Hacer un SELECT 






SELECT * FROM OPENROWSET (
                          BULK  'C:\PASO\NombreArchivo.log',
                          FORMATFILE = 'C:\PASO\FormatoImportV2.fmt'                       
                         ) AS X
RESULTADO






















CONTENIDO DEL ARCHIVO DE FORMATO .fmt


12.0
4
1 SQLCHAR 0 50 " "       1 Fecha     Latin1_General_CI_AS
2 SQLCHAR 0 50 " "        2 Hora     Latin1_General_CI_AS
3 SQLCHAR 0 50 "]"        3 Validacion Latin1_General_CI_AS
4 SQLCHAR 0 50 "\r\n"      4 Comando    Latin1_General_CI_AS








miércoles, 7 de febrero de 2018

Símbolos SQL-T

© § ×

--                                                                                            PRUEBA
Alt + 0153.. ™… trademark symbol                    ->
Alt + 0169. ©…. copyright symbol                    -> ©
Alt + 0174.. ®….registered ­ trademark symbol        ->
Alt + 0177 …±….plus-or ­-minus sign                   -> ±
Alt + 0215 .×…..multi­plication sign                 -> ×
Alt + 1………..smiley face                            ->
Alt + 13……♪…..e­ighth note                            ->
Alt + 14……♫…… ­beamed eighth note                     ->
Alt + 8721. . N-ary summation (auto sum)         -> 
Alt + 251.. ..square root check mark              ->
Alt + 8236.. .. ­infinity                          ->
Alt + 24…….↑….. ­up arrow                                          ->
Alt + 25……↓…… ­down arrow                                          ->
Alt + 26..→…..r­ght arrow                                         ->
Alt + 27……←…..l­eft arrow                                          ->
Alt + 18..↕……u­p/down arrow                                       ->

Alt + 29……↔…lef­t right arrow                                      ->

DE:

viernes, 26 de enero de 2018

CREAR UN PERCEPTRÓN con SQL-T


PERCEPTRÓN.



Los tipos de dato se generan para que al momento de crear IA con Perceptrones
evitar codificar la creación de tablas que actuarán como los Arrays


/*     ╔═══════════════════════════════════════════╗
       ║ CREA EL TIPO DE DATO DE UN PERCEPTRÓN     ║
       ╚═══════════════════════════════════════════╝ */

CREATE TYPE Perceptron AS TABLE
(
 Id                        SMALLINT NOT NULL IDENTITY (1,1),
 IndiceCapa                TINYINT  NOT NULL,
 NumeroDeNeuronas          TINYINT  NOT NULL
);
GO




/*     ╔══════════════════════════════════════════╗
       ║ CREA EL TIPO DE DATO PARA ALMACENAR LAS NEURONAS       ║
       ╚═══════════════════════════════════════════╝ */

CREATE TYPE Neuronas AS TABLE
(
 i                                TINYINT             NOT NULL,
 j                                TINYINT             NOT NULL,
 ValorFuncion       DECIMAL (18,8)      NULL,
 ValorUmbral        DECIMAL (18,8)      NULL
);
GO


/*     ╔═══════════════════════════════════════════╗
       ║ CREA EL TIPO DE DATO DE PARA RELACIONAR LAS OMEGAS       ║
       ╚═══════════════════════════════════════════╝ */
CREATE TYPE Omegas  AS TABLE
 (
  Indice_W          TINYINT,
  Neurona_Ai TINYINT,
  Neurona_Aj TINYINT,
  Neurona_Pi TINYINT,
  Neurona_Pj TINYINT
  );

 GO
















 -- Cuando se declarara un Perceptron y se carga, se envía a ésta función para generar las N neuronas en sus respectivos índices

-- Regresa una tabla con sus Neuronas en una Mattriz (i,j)
 IF OBJECT_ID('DBO.fn_GetNeuronas') IS NOT NULL DROP FUNCTION DBO.fn_GetNeuronas;
 GO
 CREATE FUNCTION DBO.fn_GetNeuronas
  (
   @Perceptron      Perceptron   READONLY
  )
 RETURNS @Neuronas TABLE
  (
       i                   TINYINT         NOT NULL,
       j                   TINYINT         NOT NULL,
       ValorFuncion        DECIMAL (18,8)  NULL,
       ValorUmbral         DECIMAL (18,8)  NULL
  )
BEGIN
 
       DECLARE @i                 TINYINT
       DECLARE @j                 TINYINT

       SET @i = 1;

             WHILE (@i<= (SELECT MAX(IndiceCapa) from @Perceptron))
                    BEGIN
                           SET @j = 1;
                           WHILE (@j <= (SELECT NumeroDeNeuronas from @Perceptron WHERE IndiceCapa = @i))
                                  BEGIN                                  
                                        INSERT INTO @Neuronas (i,j)
                                        SELECT @i, @j
                                        SET @j = @j +1;
                                  END
                           SET @i = @i + 1;
                    END
 RETURN
END
   GO





-- Una vez que se tiene la Matriz de Neuronas
-- Se envía a ésta función para generar las n Combinaciones de Omegas que puedan existir.

 IF OBJECT_ID('DBO.fn_GetOmegas') IS NOT NULL DROP FUNCTION DBO.fn_GetOmegas;
 GO
 CREATE FUNCTION DBO.fn_GetOmegas
  (
   @Neuronas Neuronas     READONLY
  )
 RETURNS @Omegas TABLE
  (
       Indice_W            TINYINT,
       Neurona_Ai          TINYINT,
       Neurona_Aj          TINYINT,
       Neurona_Pi          TINYINT,
       Neurona_Pj          TINYINT
  )
 BEGIN
             DECLARE @Contador          TINYINT
             DECLARE @NumOmegas         TINYINT
             -- El contador inicia con 1 ya que las capas de las Neuronas comienzan también con 1 N[k] Inicial = 1;
             SET @Contador = 1;
             SET @NumOmegas = (SELECT NumOmegas = MAX (i)-1 FROM @Neuronas);
            
             -- PARA GENERAR EL PRIMER  OMEGA       
             -- El primer SELECT selecciona todas las Neuronas del Indice N[k] = 1  del contador = @Contador = 1;
             -- Y genera un CROSS JOIN para hacer todas las combinaciones contra las Neuronas del Indice N[k+1] => 2 => @Contador + 1
             --
             -- Para generar los omegas subsecuentes, solamente basta con incrementar el contador y tener un WHILE
             -- para cambiar de N[K] a N[k]+1   y volver a insertar...

                    WHILE (@Contador <= @NumOmegas)
                           BEGIN
                                  INSERT INTO @Omegas        -- Inserta la capa de Omegas  N[k]  <-- vs --> N[k+1]
                                  SELECT DISTINCT                
                                   W = n.i
                                  ,Ai = n.i
                                  ,Aj = N.j
                                  ,[Pi] = ca.i
                                  ,Pj = ca.j         
                                  FROM   @Neuronas    AS N   -- Esto selecciona N[k]
                                  CROSS JOIN
                                                      (
                                                       SELECT      DISTINCT x.j, x.i
                                                       FROM  @Neuronas    AS X
                                                       WHERE x.i = @Contador + 1        -- Esto selecciona N[k+1]
                                                      ) as ca
                                  WHERE   N.I = @Contador
                                  SET @Contador = @Contador + 1;
                           END
             RETURN
 END
GO




























Para generar un Perceptrón como el de la imágen superior, se realiza de la siguiente Manera:




/*     ╔═══════════════════════════════════════════╗
       ║     CREA LA ESTRUCTURA DEL PERCEPTRÓN     ║
       ╚═══════════════════════════════════════════╝ */
--

-- SE CONSIDERA INICIAR CON LA CAPA DE ENTRADA CON UN INDICE = [1];  SIEMPRE!

DECLARE @Perceptron AS Perceptron;
INSERT INTO @Perceptron VALUES (1,3); -- Capa N[1] se tienen 3 Neuronas de Entrada
INSERT INTO @Perceptron VALUES (2,4)  -- Capa N[2] se tienen 4 Neuronas como capa intermedia
INSERT INTO @Perceptron VALUES (3,4)  -- Capa N[3] se tienen 4 Neuronas como capa intermedia
INSERT INTO @Perceptron VALUES (4,2)  -- Capa N[4] se tienen 2 Neuronas de Salida

éste tipo de dato con estructura de tipo tabla es la que indica cómo es la estructura del Perceptrón.

Ahora, se llama a la función que Genera la "Matriz" de las Neuronas indicadas por el Perceptron.



DECLARE @Neuronas   NEURONAS;
INSERT INTO @Neuronas;
SELECT *      FROM   dbo.fn_GetNeuronas (@Perceptron);


Esto es lo que contiene la variable @Neuronas
La función genera la matriz y se insertan en la variable...



















Luego se declara un tipo de Dato Omegas que es una tabla donde se insertan las n combinaciones


DECLARE @Omegas     OMEGAS
INSERT INTO @Omegas
SELECT *      FROM dbo.fn_GetOmegas (@Neuronas);







SELECT *      FROM   @Omegas












































Cada omega 1 = Indice_W contiene la combinación entre una Neurona y la otra

    N[k]     w[p]     N[k+1]

Neurona Ai          Neurona Pi
              W
Neurona Aj          Neurona Pj




i = índice de las capas de las Neuronas
ej:
i = 1   => índice de la capa de entrada
i = 4   >= índice de la capa de salida


j = índice de las Neuronas que se encuentran hacia abajo dentro de cualquier capa N