Funciones builtin
Usables como expresión en cualquier lugar, p.ej. &Usuario = USERID(). La mayoría son de cero argumentos con tipo de retorno fijo; Val() es la excepción (ver su propia entrada).
| Función | Retorno | Descripción |
|---|---|---|
USERID() | char(10) | Perfil de usuario IBM i que ejecuta este programa. Sin argumentos. |
PGNAME() | char(10) | Nombre de objeto de este mismo programa — constante de compilación, no una consulta en tiempo de ejecución. Sin argumentos. |
TODAY() | date | Fecha actual del sistema. Sin argumentos. |
TIME() | char(8) | Hora actual del sistema formateada "HH:MM:SS" (8 caracteres). Sin argumentos. |
Val(&CharVariable) | igual al destino de la asignación | Parsea un valor char a Number, usando la precisión/escala del destino de la asignación — a diferencia de las demás builtin, no tiene tipo de retorno fijo. Sólo válida directamente como &NumberVariable = Val(&CharExpr); usarla en cualquier otro lugar (anidada en otra expresión, como argumento de Do/Call, etc.) es un error. |
CurrentInput() | char(30) | Ver @Source: Event y Screen. |
String(&NumberVariable, integerDigits[, decimalDigits]) | char(integerDigits [+ 1 + decimalDigits]) | Convierte un Number a char, p.ej. para concatenarlo en un Message(...) (que sólo acepta texto). integerDigits/decimalDigits deben ser literales enteros (constantes de compilación) — el ancho del retorno depende de ellos. decimalDigits es opcional (default 0, sin separador decimal en el resultado). Ancho fijo, rellenado con ceros (sin supresión de ceros a la izquierda); no maneja negativos de forma especial. |
SubString(&Variable, inicio, longitud) | char(longitud) | Recorta un pedazo de ancho fijo de un valor char (variable o literal) para que quepa en una variable más chica — p.ej. &Corto40 = SubString(&Largo120, 1, 40). Sin esto, asignar un char más ancho directo a uno más angosto es error de compilación. inicio/longitud deben ser literales enteros. Cuando el tamaño del origen se conoce en tiempo de compilación, que inicio + longitud - 1 lo exceda también es error de compilación. |
Trim(&Variable) | igual al argumento (char/varchar) | Quita blancos a izquierda y derecha. Un solo argumento. |
LTrim(&Variable) | igual al argumento | Quita blancos a la izquierda. Un solo argumento. |
RTrim(&Variable) | igual al argumento | Quita blancos a la derecha. Un solo argumento. |
Length(&Variable) | number | Tamaño de un valor char/varchar: para varchar, el contenido real en tiempo de ejecución; para char, su longitud fija declarada. Un solo argumento. |
IndexOf(needle, &haystack) | number | Busca needle dentro de haystack y devuelve la posición cruda (1-based si se encuentra, 0 si no), sin conversión aplicada. Exactamente dos argumentos (texto a buscar, texto donde buscar). |
Fecha, hora y timestamp
Year/Month/Days/Hour/Minute/Second son polimórficas: aceptan date/time/timestamp según corresponda (Year/Month/Days con date o timestamp; Hour/Minute/Second con time o timestamp) — no hace falta un nombre distinto por tipo.
format (donde aplica) es siempre opcional: si se omite, cae al valor configurado en @GeneratorConfig (Date Format/Time Format/Timestamp Format); si tampoco hay configuración, se usa el formato por defecto del sistema.
| Función | Retorno | Descripción |
|---|---|---|
Year(&Variable) | number(4) | Año de un date/timestamp. |
Month(&Variable) | number(2) | Mes de un date/timestamp. |
Days(&Variable) | number(2) | Día del mes de un date/timestamp. |
Hour(&Variable) | number(2) | Hora de un time/timestamp. |
Minute(&Variable) | number(2) | Minuto de un time/timestamp. |
Second(&Variable) | number(2) | Segundo de un time/timestamp. |
DateDiff(&Fecha1, &Fecha2, Unidad) | number | Diferencia entre dos date, en Days/Months/Years (palabra suelta, no string). Positivo cuando Fecha1 es posterior a Fecha2, negativo en caso contrario. |
TimeDiff(&Hora1, &Hora2, Unidad) | number | Igual que DateDiff, sobre time, con Hours/Minutes/Seconds. |
TimestampDiff(&Ts1, &Ts2, Unidad) | number | Igual que DateDiff, sobre timestamp, con las 6 unidades habilitadas: Seconds/Minutes/Hours/Days/Months/Years. |
DateAdd(&Fecha, cantidad, Unidad) | date | Suma (o resta, si cantidad es negativa) días/meses/años a una fecha. cantidad puede ser cualquier expresión number (no sólo literal). |
TimeAdd(&Hora, cantidad, Unidad) | time | Igual que DateAdd, sobre time, con Hours/Minutes/Seconds. |
TimestampAdd(&Ts, cantidad, Unidad) | timestamp | Igual que DateAdd, sobre timestamp, con las 6 unidades. |
IsDate(valor[, format]) | number(1) | Valida si valor (char/varchar/number) es una fecha válida en format (opcional — uno de Iso/Usa/Eur/Jis/Mdy/Dmy/Ymd/Jul). Devuelve 1/0 (WARP no tiene tipo booleano). No es una expresión pura — igual que Val(), sólo es válida directamente como &NumberVariable = IsDate(...). |
IsTime(valor[, format]) | number(1) | Igual que IsDate, sobre time (format uno de Hms/Iso/Usa/Eur/Jis). |
IsTimestamp(valor[, format]) | number(1) | Igual que IsDate, sobre timestamp (format uno de Iso/Usa/Eur/Jis). Iso es el formato recomendado y de mayor compatibilidad. |
StringToDate(string[, format]) | date | Convierte char/varchar a date. |
NumberToDate(number[, format]) | date | Convierte number a date — mismas reglas de format que StringToDate. |
StringToTime(string[, format]) | time | Convierte char/varchar a time. |
StringToTimestamp(string[, format]) | timestamp | Convierte char/varchar a timestamp. |
DateToString(&Fecha[, format]) | char(10) | Convierte date a texto — mismas reglas de format. |
TimeToString(&Hora[, format]) | char(8) | Convierte time a texto. |
TimestampToString(&Ts[, format]) | char(26) | Convierte timestamp a texto (26 = ancho ISO con microsegundos). |
Now() | timestamp | Timestamp actual del sistema. Sin argumentos. |
Ejemplos
&Usuario = USERID()
&Programa = PGNAME()
&FechaHoy = TODAY()
&HoraActual = TIME()
&Cantidad = Val(&CantidadTexto)
Message("Total: " + String(&Total, 9, 2), Info)
&Corto = SubString(&Largo, 1, 40)
&Limpio = Trim(&ConEspacios)
&Tam = Length(&Descripcion)
&Pos = IndexOf("@", &Email)
&FechaVencimiento = DateAdd(&FechaHoy, 30, Days)
&DiasHastaVencer = DateDiff(&FechaVencimiento, &FechaHoy, Days)
&EsFechaValida = IsDate(&TextoFecha, Dmy)
&Ahora = Now()
&HorasTranscurridas = TimestampDiff(&Ahora, &Inicio, Hours)