SQLでProject Euler − Problem 04

PostgreSQL なら文字列をテーブルに変換出来るからもっとスマートになりそう。
SQL Server だと桁数を知ってる上での書き方になります。
他に良い方法あるかな?


/**
【問題】
左右どちらから読んでも同じ値になる数を回文数という。
2桁の数の積で表される回文数のうち、最大のものは
9009 = 91 × 99 である。
では、3桁の数の積で表される回文数のうち
最大のものはいくらになるか。
**/

WITH temp(x)
AS
(
	SELECT 100
UNION ALL
	SELECT t.x + 1
	FROM temp t
	WHERE t.x <= 999
)
SELECT
	ta.x * tb.x x
INTO #temp
FROM
	temp ta
		CROSS JOIN
			temp tb
OPTION (MAXRECURSION 0)

SELECT m.x
INTO #temp2
FROM
	(
		SELECT
			s.x x
			, cast(s.x as varchar(7)) y
			, len(cast(s.x as varchar(7))) l
		FROM #temp s
	) m
WHERE
	substring(y,1,1) = substring(y,l,1)
	AND substring(y,2,1) = substring(y,l-1,1)
	AND substring(y,3,1) = substring(y,l-2,1)

SELECT max(x) FROM #temp2
DROP TABLE #temp,#temp2