как проверить символ № 3 слева (2) не равен нулю из sqlcommand [duplicate]

Буквально самый простой способ исправить NullReferenceExeption имеет два пути. Если у вас есть GameObject, например, с прикрепленным скриптом и переменной с именем rb (rigidbody), эта переменная начнет пустую, когда вы начнете игру. Вот почему вы получаете NullReferenceExeption, потому что на компьютере нет данных, хранящихся в этой переменной.

В качестве примера я буду использовать переменную RigidBody. Мы можем добавить данные действительно легко на самом деле несколькими способами:

  1. Добавить RigidBody к вашему объекту с помощью AddComponent> Физика> Rigidbody Затем зайдите в свой скрипт и введите rb = GetComponent<Rigidbody>();. Эта строка кода работает лучше всего под ваши функции Start() или Awake().
  2. Вы можете добавить компонент программно и назначить переменную одновременно с одной строкой кода: rb = AddComponent<RigidBody>();

Дальнейшие заметки: если вы хотите, чтобы единство добавлялось компонент для вашего объекта, и вы, возможно, забыли добавить его, вы можете ввести [RequireComponent(typeof(RigidBody))] над объявлением класса (пробел ниже всех ваших приложений). Наслаждайтесь и получайте удовольствие от игр!

1
задан Mike 22 September 2011 в 19:30
поделиться

3 ответа

Я был бы очень удивлен, если бы вы могли обнаружить какую-либо разницу между WHERE col LIKE '[0-9]' и любыми другими методами, которые вы придумали. Но я согласен с Денисом, отложил это в функции, чтобы вы последовательно использовали одну и ту же проверку во всем своем коде (или, по крайней мере, если вы избегаете UDF из-за большого сканирования и т. Д., Поместите маркер в свой код, который будет упростить изменение в более широком масштабе позже).

Тем не менее, вы наверняка увидите больше производительности, просто используя скалярный UDF, чем тот метод, который вы используете для анализа внутри функции , Вы действительно должны сравнивать производительность UDF и делать это с помощью CASE. например,

SELECT Postal = CONVERT(INT, CASE WHEN SUBSTRING(postal,2,1) LIKE '[0-9]' 
       THEN SUBSTRING(postal, 2,1) END)
FROM ...

Это даст NULL, если символ не является числовым.

Если вы имеете дело только с проверкой локальных переменных, то действительно не имеет значения, что такое синтаксический анализ метод, который вы используете, и вам лучше сосредоточиться на своих усилиях по оптимизации в другом месте.

ИЗМЕНИТЬ добавление предложения к продемонстрированному предложению JOIN. Это потенциально приведет к менее постоянному сканированию, но будет намного более читаемым (гораздо меньше вызовов подстроки и т. Д.):

;WITH v AS 
(
    SELECT /* other columns, */ patientPostal, 
      ss = SUBSTRING(v.patientPostal,2,1),
      FROM [whatever table is aliased v in current query]
)
SELECT /* column list */
FROM [whatever table is aliased z in current query]
INNER JOIN v ON z.postal = CONVERT(INT, CASE 
    WHEN v.ss = '0' THEN ss
    WHEN v.ss LIKE '[1-9]' THEN LEFT(v.patientPostal, 3)
END);
5
ответ дан Aaron Bertrand 25 August 2018 в 19:57
поделиться

Взгляните на IsNumeric, IsInt, IsNumber , у него есть проверки для этих трех типов

1
ответ дан SQLMenace 25 August 2018 в 19:57
поделиться

Лучший способ сделать это:

IF SUBSTRING(@postal,2,1) LIKE [0-9]
CAST(SUBSTRING(@postal,2,1) AS int)
3
ответ дан Wil 25 August 2018 в 19:57
поделиться
Другие вопросы по тегам:

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