PDA

View Full Version : رساندن اندازه یک فیلد در Select به اندازه خاص



sanaz.dadkhah
پنج شنبه 18 اسفند 1390, 20:55 عصر
سلام
خسته نباشین
راستش من ی select دارم که در آن دو تا فیلد را به هم متصل میکنم و نتیجه آن را در برنامه خودم در ی combo‌نشان می دهم مثل عکس زیر

http://up98.org/upload/server1/02/c/vsaa2x13n3m8dvgua0.bmp

مشکلی که دارم این است که میخواهم علامات "|" در عکس زیر هم قرار یگیرن برای این کار باید اندازه های فیلد اوولی که با دومی متصل میشود یکی یاشد مثال همش 50 کارکتر باشه من اب دستور cast ‌به شکل زیر خواستم انجام بدهم ولی نشد


SELECT dbo.tbl_header_financial.id_header_financial AS كد, CAST(dbo.tbl_header_financial.name_header AS nvarchar(50))
+ ' | ' + dbo.tbl_type_financial.name_type_financial AS سرفصل
FROM dbo.tbl_type_financial INNER JOIN
dbo.tbl_header_financial ON dbo.tbl_type_financial.id_type_financial = dbo.tbl_header_financial.id_type_financial
WHERE (dbo.tbl_header_financial.id_type_financial <> 7)


میشه راهنماییم کنید؟

nedata
جمعه 19 اسفند 1390, 00:46 صبح
شما مي تونيد ماكزيمم طول فيلد را بدست بياريد و بعد فيلدتون را در دستورتون به آن تبديل كنيد

sanaz.dadkhah
جمعه 19 اسفند 1390, 09:03 صبح
خوب من با cast هم همین کارو دارم میکنم ولی جواب نمیده که
میشه راه حل یا دستورش را بهم بگن
من خودم اینکارو کردم


SELECT dbo.tbl_header_financial.id_header_financial AS كد, CAST(dbo.tbl_header_financial.name_header AS nvarchar(50))
+ ' | ' + dbo.tbl_type_financial.name_type_financial AS سرفصل
FROM dbo.tbl_type_financial INNER JOIN
dbo.tbl_header_financial ON dbo.tbl_type_financial.id_type_financial = dbo.tbl_header_financial.id_type_financial
WHERE (dbo.tbl_header_financial.id_type_financial <> 7)

Galawij
جمعه 19 اسفند 1390, 09:20 صبح
سلام،
من خودم نتیجه این روش را در داخل کومبو امتحان نکردم، ولی شما نوع داده اون ستونتون را از نوع Char بذارید به تناسب بیشترین حروف آن فیلد (مثلاً (Char (50). نوع داده char به همان اندازه فضا می گیره، یعنی کاراکترهای خالی را هم پر می کنه!

sanaz.dadkhah
جمعه 19 اسفند 1390, 10:03 صبح
سلام
آخه مشکل اینجاست ک داده ها در تیبل من nvarchar هستن
من char هم گذاشتم ولی بازم میزون نشد
تو ظاهره برنامم خیلی تاثیر داره راه حل دیگه ای نداره؟؟؟؟
:خجالت:

Galawij
جمعه 19 اسفند 1390, 17:12 عصر
این را امتحان کنید:
declare @MaxLen int
select @MaxLen=max(len(statuse)) from dbo.Table_1
select Rtrim(statuse) + Space(@MaxLen-len(statuse))+'|' As Name from dbo.Table_1

یوسف زالی
جمعه 19 اسفند 1390, 20:24 عصر
سلام. در تبدیلات از nchar استفاده کنید نه nvarchar.

sanaz.dadkhah
جمعه 19 اسفند 1390, 21:23 عصر
این را امتحان کنید:
declare @MaxLen int
select @MaxLen=max(len(statuse)) from dbo.Table_1
select Rtrim(statuse) + Space(@MaxLen-len(statuse))+'|' As Name from dbo.Table_1

مرسی از بابت کمکتون ولی
منطقا درسته و طول ها را هم درست نشون میده من کدم را با توجه به فرموده جنابعالی نوشتم ولی بازم نمیشه


SELECT LEN(tbl_header_financial.name_header) AS [Len Str Table], 30 - LEN(tbl_header_financial.name_header) AS [Need Space],
RTRIM(tbl_header_financial.name_header) + '|' + SPACE(30 - LEN(tbl_header_financial.name_header)) + '|' AS Result
FROM tbl_header_financial INNER JOIN
tbl_type_financial ON tbl_header_financial.id_type_financial = tbl_type_financial.id_type_financial
http://up98.org/upload/server1/02/d/91zqzcnuovl3g78nqgnj.png
اینم هم عکس نتیجه کاره علامات زیر هم قرار نمیگیرن

nedata
جمعه 19 اسفند 1390, 22:47 عصر
Select convert(char(maxlen),head)+' | '+ltrim(head)
from
(SELECT (Select max(LEN(tbl_header_financial.name_header)) FROM tbl_header_financial)AS maxlen,
RTRIM(tbl_header_financial.name_header) as head
FROM tbl_header_financial INNER JOIN
tbl_type_financial ON tbl_header_financial.id_type_financial = tbl_type_financial.id_type_financial)a

sanaz.dadkhah
شنبه 20 اسفند 1390, 07:26 صبح
متاسفانه اینم جواب نداد:گریه: