Используйте regexp_like
для поиска таких записей и to_number
для преобразования таких записей в число для сравнения:
SELECT str, CASE
WHEN REGEXP_LIKE(str, '^\d{1,6}) THEN CASE
WHEN TO_NUMBER(str) >= 200000 THEN 'more than 200000'
ELSE 'less than 200000'
END
ELSE str
END AS x_type
FROM (
SELECT 'Birthday' AS str FROM DUAL UNION
SELECT '200001' FROM DUAL
UNION SELECT '200000' FROM DUAL
) tests
Если Вы не возражаете бросать NHibernate между ними, можно использовать LINQ для NHibernate для запросов объектов, которые могут быть установлены использовать memcached в качестве их кэша.
Я не делаю, если это - то, что Вы хотите, можно зарегистрироваться в этом веб-сайте. Там можно запросить Memcached, а также запросить linq для возражения.
public static IEnumerable<User> GetAllUsers()
{
// Retrieve from cache if it exists, otherwise run the query
return (from u in ctx.Users select u).CachedQuery("allusers");
}
Это то, что Вы хотите?
Вот исходный код
public static IEnumerable<T> CachedQuery<T>
(this IQueryable<T> query, string key) where T : class
{
if (cache.KeyExists(key))
{
return (IEnumerable<T>)cache.Get(key);
}
else
{
IEnumerable<T> items = query.ToList();
cache.Set(key, items);
return items;
}
}
Поскольку я не знал, какой memcached - я погугленный вокруг и нашел этой ссылкой:
http://latebound.blogspot.com/2008/10/using-memcached-from-c.html
Который имеет раздел около нижней части на использовании запросов LINQ по memcached.
Я сталкиваюсь с некоторыми проблемами с LINQ для MEMCACHED. Но вы должны проверить сериализацию вашего LINQ DBML, будь то однонаправленные или нет.
У вас может быть удача для этого решения, стоит попробовать. Для меня я сижу с проблемой с LINQ, но другой объект, который имеет [serilizable] атрибут, работает нормально.