Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas
Mostrando entradas con la etiqueta SQL. Mostrar todas las entradas

lunes, 2 de octubre de 2017

Extraer sólo numeros de un campo string en TSQL (Microsoft SQL Server)

El ejemplo se ha probado en una base de datos Microsoft SQL Server 2008 R2
CREATE FUNCTION dbo.udf_GetNumeric
(@strAlphaNumeric VARCHAR(256))
RETURNS VARCHAR(256)
AS
BEGIN
DECLARE @intAlpha INT
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric)
BEGIN
WHILE @intAlpha > 0
BEGIN
SET @strAlphaNumeric = STUFF(@strAlphaNumeric, @intAlpha, 1, '' )
SET @intAlpha = PATINDEX('%[^0-9]%', @strAlphaNumeric )
END
END
RETURN ISNULL(@strAlphaNumeric,0)
END
GO
Now use the function as
SELECT dbo.udf_GetNumeric(column_name) 
from table_name
Ésta función es muy útil y permite extraer información sólo números de un campo cadena.
Ejemplo: Supongamos que tenemos una base de datos con los clientes y sus DNI. El DNI está almacenado con la letra y queremos sólo la parte numérica.

si hacemos: select dni from clientes

obtendremos:

dni
--------
1234567894X
1234567895J
1234567895P

ahora: creamos la función en la base de datos y a continuación realizamos la consulta:

select dbo.udf_GetNumeric(dni) from clientes
obtendremos:

dni
--------
1234567894
1234567895
1234567895

fuente:
https://stackoverflow.com/questions/16667251/query-to-get-only-numbers-from-a-string
Muchas gracias al usuario: https://stackoverflow.com/users/1841054/luv

jueves, 29 de mayo de 2014

SQLSERVER Conocer cuanto espacio ocupa una Base de datos

Ejecutando el siguiente comando sobre el monitor de comandos obtendremos la información de espacio de nuestra Base de datos

EXEC sp_spaceused N'NOMBRE_DE_LA_TABLA';

Obtendremos por pantalla el resultado como el de la imagen..
El valor viene expresado en KB para conocer el espacio que ocupa en MB Basta con divivir la cantidad indicada en el registro data entre 1024 de modo que en este ejemplo nuestra tabla de lineastickets ocupa unos 258 MB aproximadamente

viernes, 23 de mayo de 2014

Sumar o restar dias, años o meses a una fecha en TSQL con SQLSERVER

Tenemos almacenada en una tabla una columna fecha que consultaremos con una sentencia simple

select fecha from tabla

pero queremos calcular a partir de esta fecha .. 90 dias despues que fecha sería ...
pues para ello usaremos la funcion:

DATEADD (datepart , number , date )

Esta función tiene 3 parámetros:
- el primero "datepart" dice a que "parte de la fecha" (dias, meses o años) sumaremos/restaremos la cantidad que queremos añadir o sustraer a la fecha.

- el segundo "number" representa la cantidad que sumaremos o restaremos "10" dias, "10" mese, "10" años.. OJOO (menos 10, "-10" también puede ponerse)

- el ultimo es la fecha de partida

la sintaxis quedaría así...

select  fecha, dateADd(DD, 10, FECHA) FechaControl from tabla

en este ejemplo hemos devuelto la fecha de la tabla y la fecha 10 días despues

Para desginar el primer parametro hay que utilizar la siguiente tabla:

datepart
Abbreviations
year
yy , yyyy
quarter
qq , q
month
mm , m
dayofyear
dy , y
day
dd , d
week
wk , ww
weekday
dw , w
hour
hh
minute
mi , n
second
ss , s
millisecond
ms
microsecond
mcs
nanosecond
ns


fuente: http://msdn.microsoft.com/en-us/library/ms186819.aspx

viernes, 11 de abril de 2014

TSQL Devolver parte de una cadena en SQL SERVER, Concatenar y casting o conversiones

Con la funcion SUBSTRING podemos devolver parte de una cadena de un valor almacenado en nuestra Base de datos. Por ejemplo supongamos que tenemos una tabla de clientes con las columnas: Nombre, Apellido1, Apellido2 y queremos devolver una cadena con el nombre y apellidos pero queremos devolver como maximo 40 caracteres. Pues utilizamos el operador + para concatenar los valores cadenas de cada columna. 

Quedaría algo asi: 

select SUBSTRING(nombre + ' ' + apellido1 + ' ' + apellido2, 1, 40)
from clientes


Notas: 

Utilizamos la construcción + ' ' + para que no queden "pegados" el nombre y cada apellido. Introducimos un espacio. De toda la cadena concatenada devolvemos empezando por el caracter 1 los primeros 40 caracteres. Es como se leería el ejemplo. 

Nota Bis:

En caso que tengamos una columna de tipo distinto a cadena tendriamos que hacer un casting o conversión al tipo string. Ejemplo: 

Supongamos que tenemos el campo EDAD de tipo entero. Pues lo convertimos a cadena con tamaño maximo de 15 caracteres con la construcción: cast(FLAG as varchar(15)). La sintaxis quedaría así. 

select nombre + ' ' + cast(EDAD as varchar(15))
FROM CLIENTES

A esto podriamos aplicarle el SUBTRING


select SUBSTRING (nombre + ' ' + cast(EDAD as varchar(15)), 1, 40)
FROM CLIENTES


Si no hicieramos el casting tendriamos un error algo así como: 
Error de conversión al convertir el valor varchar ...



Espero que os haya ayudado. Saludos.

jueves, 2 de mayo de 2013

Cargar un GridView de Asp.Net en tiempo de ejecución por código

Este ejemplo conecta una BD de SQLServer con un GridView de ASP.Net WebFormApplication.

Con este código podremos cargar en tiempo de ejecución un GridView.

Previamente debemos tener creada la conexión "BD" a la cual llamamos en este código en el fichero web.config de la siguiente forma:


WEB CONFIG:

<?xml version="1.0" encoding="utf-8"?
<!--
 
 
Para obtener más información sobre cómo configurar la aplicación de ASP.NET, visite

http://go.microsoft.com/fwlink/?LinkId=169433
 
 
-->

<configuration>

<connectionStrings>

<add name="BD" connectionString="Data Source=NOMBRE_SERVIDOR_SQL,PUERTO INSTANCIA;Initial Catalog=NOMBRE_BASE_DATOS;Persist Security Info=True;User ID=NOMBRE_USUARIO;Password=CONTRASEÑA" providerName="System.Data.SqlClient"/>   
</connectionStrings>
<system.web>
<compilation debug="true" targetFramework="4.5" />
<httpRuntime targetFramework="4.5" />
</system.web>
</configuration>




FICHERO .CS asociado al *.ASPX (webFormApplication)

protected void Page_Load(object sender, EventArgs e)
{
 
//Cargamos el grid de datos

if (!IsPostBack){

SqlDataSource SqlDataSource1 = new SqlDataSource();

SqlDataSource1.ID = "SqlDataSource1";

this.Page.Controls.Add(SqlDataSource1);

SqlDataSource1.ConnectionString = System.Configuration.ConfigurationManager.ConnectionStrings["BD"].ConnectionString;

SqlDataSource1.SelectCommand = "SELECT top 100 Codigo, Descripcion from Articulos";



GridArticulos.DataSource = SqlDataSource1;

GridArticulos.DataBind();

}           
           

}
 

martes, 30 de abril de 2013

Operadores de conjuntos en TQL EXCEPT e INTERSECT (Transact-SQL)

EXCEPT e INTERSECT (Transact-SQL)

Estos operadores se corresponden con los modelos matemáticos de unión o intersección de conjuntos.



Ejemplos

En los ejemplos siguientes se muestra cómo utilizar los operandos INTERSECT y EXCEPT. La primera consulta devuelve todos los valores de la tabla Production.Product para comparar los resultados con INTERSECT y EXCEPT.
USE AdventureWorks2012;
GO
SELECT ProductID 
FROM Production.Product ;
--Result: 504 Rows
La siguiente consulta devuelve los valores distintos devueltos por las consultas situadas a los lados izquierdo y derecho del operando INTERSECT.
USE AdventureWorks2012;
GO
SELECT ProductID 
FROM Production.Product
INTERSECT
SELECT ProductID 
FROM Production.WorkOrder ;
--Result: 238 Rows (products that have work orders)
La siguiente consulta devuelve los valores distintos de la consulta situados a la izquierda del operando EXCEPT que no se encuentran en la consulta derecha.
USE AdventureWorks2012;
GO
SELECT ProductID 
FROM Production.Product
EXCEPT
SELECT ProductID 
FROM Production.WorkOrder ;
--Result: 266 Rows (products without work orders)
La siguiente consulta devuelve los valores distintos de la consulta situados a la izquierda del operando EXCEPT que no se encuentran en la consulta derecha. Las tablas se invierten respecto al ejemplo anterior.
USE AdventureWorks2012;
GO
SELECT ProductID 
FROM Production.WorkOrder
EXCEPT
SELECT ProductID 
FROM Production.Product ;
--Result: 0 Rows (work orders without products)
 
 
 
Fuente: http://msdn.microsoft.com/es-es/library/ms188055.aspx

Jesús Moreno - Ingeniero Ténico Informático - consultor Informático

Hola, soy Jesús Moreno Ingeniero Técnico Informático en sistemas por la US y propietario de éste blog. Mi trabajo en los ultimos años se ...