Paramu1973 Ответов: 3

Как сделать запрос select из строкового типа данных в числительные?


Привет,
У меня есть DataTable StudentsDtb, имеющий строковый столбец типа данных roll_no
roll_no хранение данных выглядит следующим образом
1
2
3
3a
3b
4
5
6
7
8
9
10
11
11a
12
13
13a
13b

From the above data I wish to have a max(roll_no) as 13. Is I possible?

object MyComputeValue=StudetsDtb.Compute(Max(roll_no),"");??????

Спасибо

Что я уже пробовал:

Попытался найти максимальное значение из строкового столбца DataTable

3 Ответов

Рейтинг:
5

Maciej Los

Если вы хотите получить наибольшее число из кода c#, проверьте это:

DataTable dt = new DataTable();
dt.Columns.Add(new DataColumn("roll_no", typeof(string)));

dt.Rows.Add("1");
dt.Rows.Add("2");
dt.Rows.Add("3");
dt.Rows.Add("3a");
dt.Rows.Add("3b");
dt.Rows.Add("4");
dt.Rows.Add("5");
dt.Rows.Add("6");
dt.Rows.Add("7");
dt.Rows.Add("8");
dt.Rows.Add("9");
dt.Rows.Add("10");
dt.Rows.Add("11");
dt.Rows.Add("11a");
dt.Rows.Add("12");
dt.Rows.Add("13");
dt.Rows.Add("13a");
dt.Rows.Add("13b");


int highestNumber = dt.AsEnumerable()
	.Max(x=> Convert.ToInt32(Regex.Split(x.Field<string>("roll_no"), @"[a-zA-z]")[0]));
//result: 13


Рейтинг:
21

#realJSOP

попробовать это:

select max(case when isnumeric(roll_no)=0 then 0 else roll_no end) as max_roll


если есть вероятность, что ваши данные не всегда будут иметь простое числовое значение (другими словами:

1
2


вы, наверное, хотите попробовать это

SELECT MAX(SUBSTRING(string, PATINDEX('%[0-9]%', roll_no), PATINDEX('%[0-9][^0-9]%', roll_no + 't') - PATINDEX('%[0-9]%', 
                    roll_no) + 1)) AS max_roll


Paramu1973

Привет, как использовать этот оператор select, как и любые коды? спасибо

#realJSOP

Я понятия не имею о чем ты просишь

Maciej Los

5ed!

Рейтинг:
1

Gregory Gadow

Это немного грохочет но должно сработать:

SELECT MAX(
  CASE WHEN T.roll_no NOT LIKE '%[^0-9]%' THEN CAST(T.roll_no AS INT) ELSE NULL END
) 
FROM Table AS T  

Это будет смотреть на каждую запись: если в ней есть нечисловые символы, она вернет null, в противном случае она преобразует строку в целое число. Функция MAX() отфильтрует значения NULL и вернет максимальное целое число.

Единственное предостережение заключается в том, что если у вас есть '14a' и '14b' без '14', то 13 будет возвращено как максимум.


Maciej Los

5ed!