Кастинг SQL-сервера MS без исключения

Попробуйте, это будет работать

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:gravity="center_horizontal|center_vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textAlignment="center" />

</LinearLayout>
32
задан Ed Guiness 25 June 2009 в 09:24
поделиться

3 ответа

Вы можете проверить, является ли значение числовым, с помощью функции TSQL ISNUMERIC ()

http: // msdn .microsoft.com / en-us / library / ms186272.aspx

И, если вы еще не знаете об этом, TSQL теперь имеет конструкцию TRY CATCH.

http://msdn.microsoft.com /en-us/library/ms179296.aspx

8
ответ дан 27 November 2019 в 20:36
поделиться

По умолчанию нечисловые значения будут равны 0 и не потребуется другой оператор:

 SELECT CASE 
    WHEN ISNUMERIC(myvarcharcolumn)=1 THEN 
       CONVERT(float, REPLACE(LTRIM(RTRIM(myvarcharcolumn)), ',', '.')) 
    ELSE 0 END AS myfloatcolumn

Вызов функции REPLACE () используется для замены запятых на точки. В некоторых культурах запятые используются в качестве десятичного разделителя (например, «1,25» вместо «1,25»), но если ваш сервер не настроен с одним из этих языков по умолчанию, ISNUMERIC () вернет 1, но CONVERT ( ) выдаст ошибку. Это действительно означает, что ваши строки не должны использовать запятые в качестве разделителей тысяч, но в большинстве случаев запятая для десятичного заполнителя, скорее всего, будет десятичным заполнителем.

LTRIM (RTRIM ()) вызван тем, что ISNUMERIC () вернет 1 для строки с начальными или конечными пробелами, но CONVERT () не может с ними справиться. Итак, вы должны обрезать свои струны.

Единственная оставшаяся потенциальная проблема заключается в том, что ISNUMERIC () вернет 1, если число может быть представлено как целое, денежное, десятичное или плавающее, но вы конвертируете только в число с плавающей запятой. На самом деле, float может хранить практически все, что вы на него бросаете, но если вы пытаетесь преобразовать его в int, ISNUMERIC () вернет 1 для такого значения, как «2.5», но CONVERT (int, '2.5') вернет по-прежнему выдает ошибку.

34
ответ дан 27 November 2019 в 20:36
поделиться

Если используемая вами версия SQL поддерживает среду CLR, вы можете написать методы в стиле TryParse. \ Однако это не соответствует вашим критериям добавления пользовательских функций в базу данных. Но, вероятно, он будет быстрее, чем SQL UDF.

что-то вроде

[SqlFunction]
public static SqlDouble TryParseDouble(SqlString str)
{
  Double d;
  bool success = Double.TryParse(str, out d);
  if (!success)
    return SqlDouble.Null;
  return new SqlDouble(d);
}
3
ответ дан 27 November 2019 в 20:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: