Extract with mysql - mysql

I have a table (incident) with a column (update_Action) that contains information. Among this information the names are enclosed in parenthesis.
06/01/15 09:49:17 Tunisia (Hamed.Ghabi):
05/01/15 13:14:11 Tunisia (sabri.zayet):
reset des TREs 05/01/15 09:38:50 Tunisia (Hamed.Ghabi):
Pb persiste. Cdt,Hamed 02/01/15 14:37:45 Tunisia (khaled.rajhi):
Restart cell Cdt, Khaled
Question:
my goal is to extract these names is to store them in another column (intervenants) in the same table.
update incident set intervenants=
(substring(Update_Action,locate('(',Update_Action),locate(')',Update_Action)))
where Status='Closed'
But I got the following result: (Hamed.Ghabi): 05/01/15 13:14:11 Tunisi, instead of: Hamed.Ghabi,Sabri.Zayet,Khaled.Rajhi.
picture of the table:
!06/01/15 09:49:17 Tunisia (Hamed.Ghabi):
05/01/15 13:14:11 Tunisia (sabri.zayet):
reset des TREs
05/01/15 09:38:50 Tunisia (Hamed.Ghabi):
Pb persiste.
Cdt,Hamed
02/01/15 14:37:45 Tunisia (khaled.rajhi):
Restart cell
Cdt, Khaled
05/01/15 09:42:40 Tunisia (Hamed.Ghabi):
02/01/15 14:38:00 Tunisia (khaled.rajhi):
Restart cell
Cdt, Khaled
26/01/15 09:14:56 Tunisia (Hamed.Ghabi):
23/01/15 11:30:46 Tunisia (walid.hadjtaieb):
prière de vérifier l’état suite intervention maintenance.
il parait que le problème est résolu (en attache)
13/01/15 11:43:19 Tunisia (nabil.zarrad):
Merci d'attacher le résultat des mesures PIM sur SM9 (pour garder l'historique des actions).
12/01/15 16:35:10 Tunisia (fethi.nasri):
Résultat mesure PIM envoyé.
07/01/15 17:53:49 Tunisia (walid.hadjtaieb):
prière de planifier une mesure PIM sur S2
06/01/15 09:46:34 Tunisia (

You could create a function to extract the text in the parenthesis:
EDIT: removed an unnecessary variable + general cleanup.
DELIMITER $$
CREATE FUNCTION `extractWordInParenthesis`(strIn varchar(500))
RETURNS varchar(500)
BEGIN
declare textString varchar(500) default strIn;
declare extractedString varchar(500) default '';
declare newOccurence varchar(500) default '';
while length(textString) <> length(replace(textString,')',''))
do
set newOccurence = substr(textString,
locate('(', textString)+1,
locate(')', textString)-locate('(', textString)-1);
-- check if the specific occurence have already been found
if length(extractedString) = length(replace(extractedString,newOccurence,''))
then
set extractedString =
concat(extractedString, ',', newOccurence);
end if;
set textString = substr(textString,locate(')', textString)+1);
end while;
RETURN substr(extractedString,2);
END$$
DELIMITER ;
This would be called like:
select extractWordInParenthesis(Update_Action) from incident
where Status = 'Closed';
And the update:
update incident set intervenants = extractWordInParenthesis(Update_Action)
where Status = 'Closed';

Related

MySql freezes the whole program if i save, alter or try to delete a Trigger

im new to SQL in general, so im learning, i had many troubles before, so the code its not clean enough.
here is my trigger, its a update from all the products, generating a table in html,If you can think of another way to do it, I would love to know it to learn, initially I tried to make a cursor inside another cursor but it gave me many errors,some1 recommended to do a trigger before update to go through all the products and only use a cursor to do the checks that I need, thanks for everything <3
(Srry for my english too, hope you can understand me)
BEGIN
declare contentCursor text;
declare tableContent text default "<table width=""250"" cellpadding=""0"" cellspacing=""0""><tbody>";
declare alegenos varchar(30);
declare contieneAlergenos int;
declare trazasCerca int;
declare siCerca text default "";
DECLARE ch_done INT DEFAULT 0;
DECLARE alegenosCursor cursor for select Nombre from ps_ets_ept_alegenos;
DECLARE CONTINUE HANDLER FOR NOT FOUND SET ch_done = 1;
-- Guardo el contenido de la descr (En los primeros 150 productos era una tabla que convertir en otra)
-- SELECT contentCursor;
-- Generar tabla correctamente apartir de la tabla equivocaeda
-- Recorro una tabla con la lista de alergenos
BLOCK2: begin
open alegenosCursor;
bucleAlergenos:LOOP fetch alegenosCursor into alegenos;
IF(ch_done = 1) THEN
-- handle the No data error!
set ch_done=1;
END IF;
-- Veo si el alergeno actual lo tiene la tabla incorrecta
SELECT LOCATE(alegenos, old.content) into contieneAlergenos;
if contieneAlergenos>0 then
-- En el caso de que este busco si tiene un Trazas o un Si, si me coloco al final de la palabra del alergeno, sumandole los 44 Es donde empieza el Si o el Trazas, el siete es por el largo de trazas + 1 espacio
SELECT LOCATE("Trazas",SUBSTR(old.content,contieneAlergenos+length(alegenos)+44,7)) INTO trazasCerca;
-- Si trazasCerca es mayor que 0 el contenido de ese alergeno son Trazas, asi que se lo asigno a la variable siCerca, en caso de que sea 0 le asigno un Si
if trazasCerca>0 then SET siCerca="Trazas";
else SET siCerca="Si";
end if;
-- Concadeno el Si o el Trazas
SELECT CONCAT(tableContent,"<tr><td width=""60%"" align=""left""><strong>", alegenos, "</strong></td><td width=""40%"" align=""left""> ", siCerca, "</td></tr>") INTO tableContent; -- devuelve Alergeno y una string si tiene Trazas o si, hace falta un locate de Si o Trazas y generar la tabla
-- En caso de no encontrar el alergeno, le meto el campo de la tabla con el alergeno y un no
else SELECT CONCAT(tableContent,"<tr><td width=""60%"" align=""left""><strong>", alegenos, "</strong></td><td width=""40%"" align=""left"">No</td></tr>")INTO tableContent ; -- tienes el alergeno que no está en la tabla, aqui generare la td de el alergeno con un No
end if;
-- reinicio las variables que suelo concadenar
SET siCerca="";
SET trazasCerca=0;
SET contieneAlergenos=0;
-- select tableContent as Dentro;
END LOOP bucleAlergenos;
select CONCAT(tableContent,"</tbody></table>")INTO tableContent;
insert into pruebaTablas VALUES (tableContent);
set tableContent="";
close alegenosCursor;
END BLOCK2;
END

Bash - Add Mysql column name to query result

I've made a Batch script that does a query to a MYSQL DB then send an email, The problem I have is the query result don't show the name of the column.
#Definimos de correo
# ===================
export SUBJECT="Mediciones_Cumplimiento_de_Calidad-$FECHA"
export SERVER=Conda
# Definimos las variables de ubicación delos archivos utilizados por este script
# ===============================================================================
export DIR=/opt/iway/scripts/envio_mediciones
export LOG_FILE=${DIR}/envio_mediciones.log
export CONSULTA_MEDICIONES=${DIR}/mediciones_conda.sql
export MAIL_FILE=${DIR}/mediciones.mail
export SALIDA_MEDICIONES=${DIR}/Mediciones_Cumplimiento_de_Calidad-$FECHA.csv
export TEMP_FILE=${DIR}/temporal
export MAX_LOG_FILE_SIZE=5000
#Definido el nombre del ZIP:
SALIDA_ZIP="Mediciones_Cumplimiento_de_Calidad-${FECHA}.zip"
# Limpiamos el archivo que contiene el cuerpo del mail y le ponemos un encabezado
# ===============================================================================
${ECHO} subject: ${SUBJECT} > ${MAIL_FILE}
${ECHO} ${SUBJECT} >> ${MAIL_FILE}
${ECHO} "===================================" >> ${MAIL_FILE}
${ECHO} >> ${MAIL_FILE}
# Ejecutamos las Query's
# ======================
########################################################################################################
${MYSQL} < ${CONSULTA_MEDICIONES} > ${SALIDA_MEDICIONES}
${ZIP} ${SALIDA_ZIP} -j ${SALIDA_MEDICIONES}
${UUENCODE} ${SALIDA_ZIP} ${SALIDA_ZIP} >> ${MAIL_FILE}
${CAT} ${MAIL_FILE} |${SENDMAIL} -F ${REMITENTE} ${DESTINATARIOS}
This is the mysql query:
SELECT
CONCAT(HO.codigosonda,',') AS 'SONDA',
CONCAT(HO.host ,',') AS 'ID AGENTE',
CONCAT(CONCAT(HD.country, HD.state),',') AS 'UBICACIÓN',
CONCAT(P.planname,',') AS 'PLAN DE SERVICIO',
CONCAT(FROM_UNIXTIME(H.`clock`),',') AS 'FECHA DE MEDICIÓN',
CONCAT(I.`descriptionLong`,',') AS 'KPI',
CONCAT(ROUND(H.`value` / 1024 / 1024, 0),',') AS 'MEDICION( Mbps )'
FROM
`bm_history` H
INNER JOIN
`bm_items` I ON H.`id_item` = I.`id_item`
INNER JOIN
`bm_host` HO ON HO.`id_host` = H.`id_host`
INNER JOIN
`bm_plan` P ON P.id_plan = HO.id_plan
LEFT JOIN
`zold_host_features` HD ON HD.`id_host` = H.`id_host`
WHERE
(H.`clock` BETWEEN UNIX_TIMESTAMP(CONCAT(CURDATE() - INTERVAL 1 DAY, ' 00:00:00')) AND UNIX_TIMESTAMP(CONCAT(CURDATE() - INTERVAL 1 DAY, ' 23:59:59')))
AND HO.`groupid` = 6
AND H.`id_item` IN (3867 , 3855)
ORDER BY `clock` DESC
The result is not giving me the Column names just the data how can I add that information?

how to format mysql float into sytem local values or decimal comma for a reportlab billing system

I have a Reportlab form for a billing system and it works good. But what I want to get are the values in sytem local values, with decimal comma, or separator; something as next instead as shown in the picture:
1,350,000.00
I'd like something like FORMAT in MySQL, but the problem with this one is that it does'nt let me to sum the values to get the total because it returns the values as string.
SELECT FORMAT (columna, 'es_CO') FROM tabla;
How my form looks like
And my Python code:
Just retefuente, ivajuridico, rteiva and i_vlrenta are float in mysql
#!/usr/bin/python
#-*- coding:utf-8 -*-
from Tkinter import*
from tkMessageBox import*
import MySQLdb
from controller import *
import analisis_arrendatarios
import os
import datetime
import time
import locale
locale.setlocale(locale.LC_ALL, "")
#LIBRERÍA PLATYPUS DE REPORTLAB PARA CREAR TABLAS
from reportlab.platypus import (SimpleDocTemplate, PageBreak, Image, Spacer,
Paragraph, Table, TableStyle)
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib.pagesizes import letter
from reportlab.lib import colors
styleSheet = getSampleStyleSheet()
style = styleSheet['BodyText']
class Proceso_Fact_Auto_Arre(Frame):
def __init__(self, parent, controller):
Frame.__init__(self, parent)
global opt
#VARIABLES
opt = IntVar()
#WIDGETS
header = Label(self, text="TENANTS AUTO BILLING PROCESS", font="bold")
header.pack(pady=20, side=TOP)
wrapper = Frame (self)
wrapper.pack()
r1 = Radiobutton(wrapper, text="Generate Analysis", variable=opt, value=0).pack(pady=5, anchor=W)
r2 = Radiobutton(wrapper, text="Generate Billings", variable=opt, value=1).pack(pady=5, anchor=W)
Button(wrapper, text="Iniciar Proceso", bg='navy', foreground='white', activebackground='red3', activeforeground='white', command=operacion).pack(pady=5, anchor=W)
def operacion():
if opt.get()==0:
showinfo('Operation', "Generate Analysis")
try:
connect.commit()
#Consulta de códigos y valores de la tabla 'configuracion'
cursor.execute("SELECT cod_canon, cod_subtotalarrend, cod_ivaarrend,
retefuente, ivajuridico, rteiva, resolucion
FROM configuracion;")
dato1 = cursor.fetchall()
#Consulta de datos generales del propietario y el arrendatario para la factura
cursor.execute("SELECT p_cc, dueño, r_carpeta, relacionip.i_cod, i_dir, i_vlrenta, i_tel, contratos.a_cc, inquilino, a_tpersona, a_contribuyente
FROM contratos
INNER JOIN relacionip ON contratos.r_id = relacionip.r_id
INNER JOIN inmuebles ON relacionip.i_cod = inmuebles.i_cod
INNER JOIN arrendatarios ON contratos.a_cc = arrendatarios.a_cc;")
#cursor.execute("SELECT p_cc, dueño, r_carpeta, relacionip.i_cod, i_dir, FORMAT(SUM(i_vlrenta), 2,'es'), i_tel, contratos.a_cc, inquilino, a_tpersona, a_contribuyente
#FROM contratos
#INNER JOIN relacionip ON contratos.r_id = relacionip.r_id
#INNER JOIN inmuebles ON relacionip.i_cod = inmuebles.i_cod
#INNER JOIN arrendatarios ON contratos.a_cc = arrendatarios.a_cc;")
dato2 = cursor.fetchall()
except:
pass
for c in dato1:
canon = c[0]
subtotal = c[1]
iva = c[2]
retef = c[3]
ivajuridi = c[4]
retei = c[5]
resolucion = c[6]
doc = SimpleDocTemplate("facturas/factura_auto_inquilino.pdf", pagesize = (595.27,400.00), rightMargin=5, leftMargin=5, topMargin=10, bottomMargin=0)
story=[]
for i in dato2:
nit = i[0]
prop = i[1]
folder = i[2]
inm = i[3]
loc = i[4]
renta = i[5]
tel = i[6]
cc = i[7]
arrend = i[8]
tipo = i[9]
contri = i[10]
#SI ARREND ES NATURAL(1)
if tipo == 1:
tipo = 0
#SI ARREND ES JURÍDICO(2)
if tipo == 2:
tipo = renta*ivajuridi/100
total = renta+tipo
tiempo = datetime.date.today()
anio = time.strftime("%Y")
mes = time.strftime("%B")
#-------------------------------------------- CABECERA DEL DOCUMENTO
#VARIABLES
logo = Image("img/logo.gif", width=150, height=45) #LOGO
logo.hAlign ='LEFT' #Posicion de la img en la hoja
info = Paragraph('''<para align=center leading=8><font size=6>CALLE 11A N°42-68 LOC,195 ED. EL DORADO<br/>TELEFONO: 3110513 FAX:2664154<br/>AFILIADO A FENALCO<br/>M.A.V.U N°000078</font></para>''', styleSheet["BodyText"])
tipoDoc = Paragraph ('''<para align=right><b>FACTURA DE VENTA<br/>N°</b></para>''', styleSheet["BodyText"])
#TABLA 1
tabla1 = Table([[logo, info, tipoDoc]], colWidths=[200,150,140], rowHeights=None)
tabla1.setStyle([
('VALIGN', (1,0), (2,0), 'TOP'),
('ALIGN', (2,0), (2,0), 'RIGHT')#ALINEAR A LA DER
])
story.append(tabla1) #Construye la tabla 't' definida anteriormente
story.append(Spacer(0,-10)) #Espacio del salto de línea con el siguiente Ejemplo
#-------------------------------------------- DATOS GENERALES DEL DOCUMENTO
#VARIABLES
inquilino = Paragraph ('''<font size=6><b>Nombre Arrendatario:</b><br/></font>%s'''%arrend, styleSheet["BodyText"])
docID = Paragraph ('''<font size=6><b>CC/Nit: </b></font> %s''' %nit, styleSheet["BodyText"])
locImn = Paragraph ('''<font size=6><b>Dirección Inmueble:</b><br/></font>%s'''%loc, styleSheet["BodyText"])
telefono = Paragraph ('''<font size=6><b>Teléfono:</b><br/></font>%s'''%tel, styleSheet["BodyText"])
IDpropietario = Paragraph ('''<font size=6><b>CC/Nit:</b><br/></font>%s'''%cc, styleSheet["BodyText"])
propietario = Paragraph ('''<font size=6><b>Propietario: </b></font>%s'''%prop, styleSheet["BodyText"])
fechaFormato = Paragraph ('''<para align=center fontSize=6>Día Mes Año</para>''', styleSheet["BodyText"])
hoy = time.strftime("%d/%m/%Y")
fecha = Paragraph ('''<para align=center spaceBefore=0>%s</para>''' %hoy, styleSheet["BodyText"])
codigoImn = Paragraph ('''<font size=6><b>Código Inmueble:</b><br/></font>%s'''%inm, styleSheet["BodyText"])
#TABLA 2
datos = [[inquilino,'','','','',[fechaFormato,fecha]],
[docID,'','',propietario,'',''],
[locImn,'',telefono,IDpropietario,'',codigoImn]]
tabla2 = Table(datos,
style=[('BOX',(0,0),(2,2),0.5,colors.black),
('VALIGN', (0,0),(2,0),'TOP'),
('SPAN',(0,0),(2,0)),#Combinar 3 filas (col0,row0) hasta (col2,row0) Arrendatario #0
('SPAN',(0,1),(2,1)),#Combinar 3 filas CC/Nit #1
('SPAN',(0,2),(1,2)),#Combinar 2 filas Dirección #2
('SPAN',(3,1),(5,1)),#Combinar 3 filas Nombre Propietario #
('SPAN',(3,2),(4,2)),#Combinar 2 filas CC/Nit Propietario #
('GRID',(3,1),(4,2),0.5,colors.black),
('GRID',(5,0),(5,2),0.5,colors.black)
],colWidths=[100,90,90,90,80,70], rowHeights=None)
#Constructor y espaciado
story.append(Spacer(0,15)) #Espacio del salto de línea con el siguiente Ejemplo
story.append(tabla2) #Construye la tabla 't' definida anteriormente
#-------------------------------------------- DETALLES DEL DOCUMENTO
#VARIABLES
desc = Paragraph('''<para align=center><b>DESCRIPCION</b></para>''', styleSheet["BodyText"])
vlr = Paragraph('''<para align=center><b>VALOR</b></para>''', styleSheet["BodyText"])
concepto = Paragraph('''Valor Arrendamiento Mes: %s/%s''' % (mes,anio), styleSheet["BodyText"])
resol = "Resolucion Dian N°110000658514 de Diciembre de 2015 Consectivo Facturacion 33001 al 36000. P"
#TABLA 3
data=[[desc, '', vlr], #0
[concepto, '', renta], #1
['', '', ''], #2
['', '', ''], #3
['', '', ''], #4
['', '', ''], #5
['', '', ''], #6
['Observaciones', 'SUBTOTAL', renta], #7
['', 'IVA', tipo], #8
[resolucion, 'TOTAL', total]] #9
#Formato de la tabla
tabla3 = Table(data,
style=[('GRID',(0,0),(2,0),0.5,colors.black),#Color regilla de DESCRIPCION & VALOR
('BOX',(2,1),(2,9),0.5,colors.black), #Color & grosor de la tabla/marco externo de los VALORES
#('BACKGROUND',(0,0),(2,0), colors.pink), #Color de fondo de DESCRIPCION & VALOR #0
('SPAN',(0,0),(1,0)), #Combinar filas DESCRIPCION #0
('BOX',(0,1),(2,6),0.5,colors.black), #Color & grosor de la tabla o marco externo de los DETALLES
('ALIGN', (2,1), (2,1), 'RIGHT'),#Centrar renta #1
('ALIGN', (2,7), (2,7), 'RIGHT'),#Centrar renta #7
('ALIGN', (2,8), (2,8), 'RIGHT'),#Centrar tipo #8
('ALIGN', (2,9), (2,9), 'RIGHT'),#Centrar total #9
#('ALIGN', (2,9), (2,9), 'CENTER'),#Centrar total #9
('SPAN',(0,1),(1,1)), #Combinar filas de Detalle #1
('SPAN',(0,2),(1,2)), #Combinar filas de Detalle #2
('SPAN',(0,3),(1,3)), #Combinar filas de Detalle #3
('SPAN',(0,4),(1,4)), #Combinar filas de Detalle #4
('SPAN',(0,5),(1,5)), #Combinar filas de Detalle #5
('SPAN',(0,6),(1,6)), #Combinar filas de Detalle #6
('GRID',(1,7),(2,9),0.5,colors.black),#Color regilla de SUBTOTAL, IVA, TOTAL
('BOX',(0,7),(0,9),0.5,colors.black), #Color & grosor de la tabla o marco externo de los OBSERVACIONES Y RESOLUCION
('FONTSIZE', (0,9),(0,9),7), #Tamaño de la Resolucion
#('BACKGROUND',(1,9),(1,9),colors.black),#Color de fondo de TOTAL
('TEXTCOLOR',(1,9),(1,9),colors.black), #Color de letra de TOTAL
#('BACKGROUND',(2,9),(2,9),colors.grey)#Color de fondo de VALOR TOTAL
],colWidths=[340,80,100], rowHeights=None)
story.append(Spacer(0,15)) #Espacio del salto de línea con el siguiente Ejemplo
story.append(tabla3) #Construye la tabla 't' definida anteriormente
#-------------------------------------------- FIN PDF
doc.build(story) #Constructor del documento
if sys.platform == 'linux2':
os.system("xdg-open ~/Project/facturas/factura_auto_inquilino.pdf")#DEBIAN
elif sys.platform == 'linux2':
os.system("/usr/bin/gnome-open facturas/factura_auto_inquilino.pdf")#UBUNTU
else:
os.startfile("Project/facturas/factura_auto_inquilino.pdf")#WINDOWS
else:
#Code to insert data into a billinf table)
SELECT FORMAT(SUM(columna), 2, 'es_CO') FROM tabla;
For example:
mysql> SELECT FORMAT(SUM(population), 3, 'es_CO') FROM canada;
+-------------------------------------+
| FORMAT(SUM(population), 3, 'es_CO') |
+-------------------------------------+
| 23584718,000 |
+-------------------------------------+
1 row in set (0.01 sec)
I suspect you wanted something like
| 23.584.718,000 |
Then I suggest you file a bug with bugs.mysql.com . It seems that the 'grouping separator' is incorrect?
Meanwhile, will 'es' (instead if 'es_CO') work correctly enough?
As some guys suggested, what I had to do was: sum the values, which was already done in my code, add a new variable appling a format with 'locale.format', and then just place that variable in the corresponding place in the reportlab form. For the total value it was not necessary to create a new variable, but just apply locate.
So, I added to my code something like this:
for i in dato2:
#...
renta = i[5]
#New var to show value with thousands separator in the form
renta1 = locale.format("%d", renta, grouping=True)
tipo = i[9]
#SI ARREND ES NATURAL(1)
if tipo == 1:
tipo = 0
#New var to show value with thousands separator in the form
tipo1 = locale.format("%d", tipo, grouping=True)
#SI ARREND ES JURÍDICO(2)
if tipo == 2:
tipo = renta*ivajuridi/100
#New var to show value with thousands separator in the form
tipo1 = locale.format("%d", tipo, grouping=True)
total = locale.format("%d", renta+tipo, grouping=True)
#REPORTLAB FORM TABLA 3
data=[[desc, '', vlr], #0
[concepto, '', renta], #1
['', '', ''], #2
['', '', ''], #3
['', '', ''], #4
['', '', ''], #5
['', '', ''], #6
['Observaciones', 'SUBTOTAL', renta], #7
['', 'IVA', tipo], #8
[resolucion, 'TOTAL', total]] #9

MySQL sort query by specific letters

I've a mysql table with a lot of folderNames and Directory names, for Example "C:\xx\xyz" or "C:\xx" or "C:\xx\xyz\abc".
Now I have to sort this Query by the count of this Backslashes. I need the Dir C:\xx as first, because I have to create this Directory before I can create a sub-dir in it.
How can I do this?
Something like this:
SELECT dirName
FROM yourTable
ORDER BY (LENGTH(dirName) - LENGTH(REPLACE(dirName, '\\', '')))
SQLFillde demo
ORDER BY LENGTH(folder)-LENGTH(REPLACE(folder,'\\',''))
It's often not necessary to create directories in order:
C:\>mkdir test
C:\>dir test
El volumen de la unidad C es Sistema
El número de serie del volumen es: 6882-2759
Directorio de C:\test
15/02/2013 12:01 <DIR> .
15/02/2013 12:01 <DIR> ..
0 archivos 0 bytes
2 dirs 115.358.355.456 bytes libres
C:\>mkdir test\foo\bar\one\two\three
C:\>dir test
El volumen de la unidad C es Sistema
El número de serie del volumen es: 6882-2759
Directorio de C:\test
15/02/2013 12:02 <DIR> .
15/02/2013 12:02 <DIR> ..
15/02/2013 12:02 <DIR> foo
0 archivos 0 bytes
3 dirs 115.358.355.456 bytes libres
C:\>

String formatting in MySQL

Is there a printf()-like formatting in MySQL?
I couldn't find a straightforward way in the documentation.
For example, how can I make something like:
SELECT STRFORMATFUNCTIONIMLOOKINGFOR("%03d", 17)
to get 017 ?
for your example, you could use
SELECT LPAD(17, 3, '0');
there is also
SELECT FORMAT(17, 3); -- 17.000
otherwise, UDF as mentioned above.
Maybe it will be useful:
select lpad(1, 2, '0') str;
+-----+
| str |
+-----+
| 01 |
+-----+
select lpad(11, 2, '0') str;
+-----+
| str |
+-----+
| 11 |
+-----+
see FORMAT() function:
mysql> SELECT FORMAT(12332.123456, 4);
returns '12,332.1235'
but it's only for formatting float numbers.
--
-- Autor: Ivan Sansão.
--
-- Função para formatar strings.
-- Exemplo: select mask("0123456789","(##) ####-####");
-- Retorna: (01) 2345-6789
CREATE FUNCTION mask(texto VARCHAR(255), mascara VARCHAR(255)) RETURNS VARCHAR(255) CHARSET latin1
Begin
-- Contém o texto processado.
DECLARE textoProcessado VARCHAR(255);
SET textoProcessado = "";
-- Se tem Texto.
IF length(texto) > 0 THEN
-- Percorre a máscara enquanto seu tamanho for maior que zero.
WHILE Length(mascara) > 0 DO
-- Se o caracter é um curinga.
IF LEFT(mascara,1) = "#" THEN
-- Concatena o primeiro caracter do texto.
SET textoProcessado = concat(textoProcessado,LEFT(texto,1));
-- Elimina o primeiro caracter da máscara.
SET mascara = SUBSTRING(mascara,2,255);
-- Elimina o primeiro caracter do texto.
SET texto = SUBSTRING(texto,2,255);
ELSE
-- Concatena o primeiro caracter da máscara.
SET textoProcessado = concat(textoProcessado,LEFT(mascara,1));
-- Elimina o primeiro caracter da máscara.
SET mascara = SUBSTRING(mascara,2,255);
END IF;
END WHILE;
END IF;
RETURN trim(textoProcessado);
END
You can implement this kind of function by creating a new UDF (user defined function).E.g. see http://dev.mysql.com/doc/refman/5.1/en/adding-functions.html