2012-04-18 852 views
6

Necesito obtener los dos últimos dígitos de un entero. Cada elemento colocado en las tablas viene como un año completo, es decir. YYYY y sólo quieren que los dos últimos dígitos, de modo que todos los campos muestranSQL que obtiene los dos últimos dígitos del número entero

YEAR 
---- 
09 
00 
89 

donde estaba el campo initialy

YEAR 
---- 
2009 
2000 
1989 

EDIT: Obtener una queja diciendo

HINT: No function matches the given name and argument types. You might need to add explicit type casts.

cuando intento

select right(cast(year as char),2) from subjects;

Respuesta

9

Postgres ha prestado (o heredado) el operador módulo de C:

SET search_path='tmp'; 

CREATE TABLE lutser (year integer); 

INSERT INTO lutser (year) 
     SELECT generate_series(1991,2012) 
    ; 

SELECT year 
    , year/100 as c2 
    , year % 100 AS y2 
    FROM lutser 
    ; 

Resultado:

CREATE TABLE 
INSERT 0 22 
year | c2 | y2 
------+----+---- 
1991 | 19 | 91 
1992 | 19 | 92 
1993 | 19 | 93 
1994 | 19 | 94 
1995 | 19 | 95 
1996 | 19 | 96 
1997 | 19 | 97 
1998 | 19 | 98 
1999 | 19 | 99 
2000 | 20 | 0 
2001 | 20 | 1 
2002 | 20 | 2 
2003 | 20 | 3 
2004 | 20 | 4 
2005 | 20 | 5 
2006 | 20 | 6 
2007 | 20 | 7 
2008 | 20 | 8 
2009 | 20 | 9 
2010 | 20 | 10 
2011 | 20 | 11 
2012 | 20 | 12 
(22 rows) 
3
select substring(CAST(2012 as CHAR(4)), 3, 2) 
1

No sé si hay una función LEN en Postgres, pero si lo hace, intente esto:

select SUBSTRING(year,len(year)-1,len(year)) 
+0

cuando he intentado usar len() o la función de la longitud() en PostgreSQL se dice que la función doesn' t existe. – Madhusudan

0

También puede utilizar a continuación consulta SQL:

select to_char as year from to_char(current_timestamp, 'YY') 

Aquí se utiliza dos últimos dígitos del año de current_timestamp

Cuestiones relacionadas