Как мне вернуть пробел от Microsoft T- SQL? - PullRequest
0 голосов
/ 02 мая 2020

Я хочу, чтобы SQL вернул либо "*", либо " " (чтобы увеличить расстояние вниз по линии). Он возвращает "*" или "", когда ему говорят, что нужно возвращать " ".

Из других вопросов и моих собственных попыток похоже, что обходного пути нет. У вас есть решение?

CREATE FUNCTION [dbo].[fn_nettAsStar]
    (@isNett bit)
RETURNS char(1)
AS
BEGIN
    /* set space */
    DECLARE @nett char(1)
    SET @nett = ' ' 

    IF @isNett = 1
    BEGIN
        SET @nett = '*'
    END

    RETURN @nett

Ответы [ 2 ]

0 голосов
/ 04 мая 2020

спасибо за ответы. Я использовал функцию для построения строки отчета, которая получается на 1 символ короче, когда возвращается «пробел». Как и предполагалось, я использовал LEN () для проверки того, что получаю пустую строку.

Мое решение - использовать процедурный код, а не SQL для форматирования строки.

0 голосов
/ 02 мая 2020

Я согласен с @Martin

Если вы используете LEN, чтобы прийти к выводу, что это пустая строка, а не пробел, то она не считает конечные пробелы, поэтому вернет ноль

когда вы поместите значение 'abc' в поле / переменную типа CHAR(5), значение станет 'abc ', но функция LEN все равно будет "правильно" возвращать 3 в этом случае. но если вы используете DATALENGTH вместо LEN, вы увидите, что длина его на самом деле составляет 5 символов. Если вы определили свою переменную с помощью VARCHAR(5), то использование LEN снова даст вам длину 0, однако DATALENGTH даст вам 1

ПРИМЕЧАНИЕ: VARCHAR - это символ переменной длины

для вывода

@nett varchar(1) = ''  => LEN = 0, DATALENGTH = 0
@nett varchar(1) = ' '  => LEN = 0, DATALENGTH = 1
@nett    char(1) = ''  => LEN = 0, DATALENGTH = 1
@nett    char(1) = ' '  => LEN = 0, DATALENGTH = 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...