Я бы использовал регулярные выражения, так как вы не всегда можете использовать Linq для SQL.
Как этот пример Linq to Objects
List<string> list = new List<string>();
list.Add("This is a sentence.");
list.Add("This is another one.");
list.Add("C# is fun.");
list.Add("Linq is also fun.");
System.Text.RegularExpressions.Regex regEx = new System.Text.RegularExpressions.Regex("This");
var qry = list
.Where<string>(item => regEx.IsMatch(item))
.ToList<string>();
// Print results
foreach (var item in qry)
{
Console.WriteLine(item);
}
Никогда не должны Вы использовать деньги. Это не точно, и это - чистый мусор; всегда используйте десятичный/числовой.
Выполнение это для наблюдения то, что я имею в виду:
DECLARE
@mon1 MONEY,
@mon2 MONEY,
@mon3 MONEY,
@mon4 MONEY,
@num1 DECIMAL(19,4),
@num2 DECIMAL(19,4),
@num3 DECIMAL(19,4),
@num4 DECIMAL(19,4)
SELECT
@mon1 = 100, @mon2 = 339, @mon3 = 10000,
@num1 = 100, @num2 = 339, @num3 = 10000
SET @mon4 = @mon1/@mon2*@mon3
SET @num4 = @num1/@num2*@num3
SELECT @mon4 AS moneyresult,
@num4 AS numericresult
Вывод: 2949.0000 2949.8525
некоторым людям, которые сказали, что Вы не делите деньги на деньги:
Вот один из моих запросов для вычисления корреляций и изменения, которое к деньгам дает неправильные результаты.
select t1.index_id,t2.index_id,(avg(t1.monret*t2.monret)
-(avg(t1.monret) * avg(t2.monret)))
/((sqrt(avg(square(t1.monret)) - square(avg(t1.monret))))
*(sqrt(avg(square(t2.monret)) - square(avg(t2.monret))))),
current_timestamp,@MaxDate
from Table1 t1 join Table1 t2 on t1.Date = traDate
group by t1.index_id,t2.index_id
SQLMenace сказал, что деньги неточны. Но Вы не умножаетесь/делите деньги на деньги! Насколько времена за 3 доллара 50 центов? 150 dollarcents? Вы умножаетесь/делите деньги на скаляры, которые должны быть десятичными.
DECLARE
@mon1 MONEY,
@mon4 MONEY,
@num1 DECIMAL(19,4),
@num2 DECIMAL(19,4),
@num3 DECIMAL(19,4),
@num4 DECIMAL(19,4)
SELECT
@mon1 = 100,
@num1 = 100, @num2 = 339, @num3 = 10000
SET @mon4 = @mon1/@num2*@num3
SET @num4 = @num1/@num2*@num3
SELECT @mon4 AS moneyresult,
@num4 AS numericresult
Результаты в корректном результате:
moneyresult numericresult --------------------- --------------------------------------- 2949.8525 2949.8525
money
хорошо, пока Вам не нужны больше чем 4 десятичных цифры, и Вы удостоверяетесь свои скаляры - которые не представляют деньги - decimal
с.
Я только что видел эту запись в блоге: Деньги против десятичных в SQL Server .
В основном это говорит о том, что у денег есть проблема с точностью ...
declare @m money
declare @d decimal(9,2)
set @m = 19.34
set @d = 19.34
select (@m/1000)*1000
select (@d/1000)*1000
Для денег
], вы получите 19.30 вместо 19.34. Я не уверен, существует ли сценарий приложения, в котором деньги делятся на 1000 частей для расчета, но этот пример действительно демонстрирует некоторые ограничения.